SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: Señor X² en Martes 31 de Octubre de 2006, 05:52

Título: Cómo Saber Si Un Archivo Existe?
Publicado por: Señor X² en Martes 31 de Octubre de 2006, 05:52
Hola amigos, me está matando un tema que no pensé que se me iba a hacer tan complicado, lo que quiero hacer es abrir el archivo y escribirle una linea, pero si el archivo existe, ignorar eso, tengo el siguiente codigo, a ver si me pueden marcar el error o decirme alguno nuevo, no tengo problemas:

Código: Text
  1.  
  2.   fstream f;
  3.  
  4.   f.open("archivo.txt",ios::out | ios::beg | ios::noreplace);
  5.     if(f.is_open()){
  6.       f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n";
  7.       f.close();
  8.   } else ShowMessage("El archivo ya existe");
  9.  
  10.  
Con este código, me escribe el archivo siempre, como si el ios::noreplace no anduviera.


Es la primera vez que uso el ios::noreplace, puede que mi error esté ahí.
También probé con este código:
Código: Text
  1.  
  2.   fstream f;
  3.  
  4.   f.open("archivo.txt", ios::in);
  5.   if(!f.is_open()){
  6.     f.open("archivo.txt",ios::out | ios::beg);
  7.     if(f.is_open()){
  8.       f<<"Monto inicial\t"<<Edit1->Text.c_str()<<"\n";
  9.       f.close();
  10.     } else ShowMessage("No se puede abrir el archivo!!");
  11.   }  else {
  12.       f.close();
  13.       ShowMessage("El archivo ya existe");
  14.   }
  15.  
  16.  
Lo que intento hacer ahí, es abrir el archivo solo para leerlo, si eso da error, lo abro para escritura y lo creo.
Y con este código no lo escribe nunca al archivo, pero si detecta si existe o no.

Muchas Gracias
Saludos
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: Eternal Idol en Martes 31 de Octubre de 2006, 09:18
Una forma simple de saberlo es usar GetFileAttributes:
http://msdn.microsoft.com/library/default....eattributes.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getfileattributes.asp)

Si te devuelve INVALID_FILE_ATTRIBUTES es que el archivo no existe.
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: boheme en Martes 31 de Octubre de 2006, 09:58
Tan fácil como:

FileExists("ruta_archivo");


o también

AnsiString directorio_de_trabajo = ExtractFileDir(Application->ExeName);
FileExists(directorio_de_trabajo + "\\archivo_relativo");
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: Eternal Idol en Martes 31 de Octubre de 2006, 10:55
Cita de: "boheme"
FileExists("ruta_archivo");
 
Si, eso funciona pero solo en Borland ... es cierto que GetFileAttributes no es algo standard pero al menos con cualquier compilador para Windows funcionara ... FileExists  no funcionara ni con VC++ ni con gcc ni con ningun otro.
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: Señor X² en Martes 31 de Octubre de 2006, 16:09
Muchas Gracias Boheme y Ethernal Idol por las respuestas, me parece que voy a usar FileExists y voy a tener en cuenta que no funciona si no es borland.

Muchas Gracias
Saludos
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: boheme en Martes 31 de Octubre de 2006, 17:53
Cita de: "Eternal Idol"
Si, eso funciona pero solo en Borland ...
Como estamos en el subforo de borland builder puedo suponer que nuestro compañero utiliza borlando builder, por eso le recomiendo esa forma de obtener tal información.

Un saludi¡o.
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: Eternal Idol en Martes 31 de Octubre de 2006, 18:11
Cita de: "boheme"
Como estamos en el subforo de borland builder puedo suponer que nuestro compañero utiliza borlando builder, por eso le recomiendo esa forma de obtener tal información.

Un saludi¡o.
Si, como generalmente despues de un tiempo la gente se da cuenta de la calidad de los productos de Borland y deja de usarlos supongo que es mejor recomendar cosas que al menos sirvan sobre la misma plataforma en otros compiladores.
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: boheme en Jueves 2 de Noviembre de 2006, 13:56
Y ya puestos también podríamos recomendar a los usuarios de Borland que cambiaran de SO y dejaran atrás toda la mierda e incompatibilidades que genera la plataforma hasefroch windowsxp, pero ya sería obligar a la gente a pensar, y eso es demasiado.

 :P
Título: Re: Cómo Saber Si Un Archivo Existe?
Publicado por: Eternal Idol en Jueves 2 de Noviembre de 2006, 13:59
Cita de: "boheme"
Y ya puestos también podríamos recomendar a los usuarios de Borland que cambiaran de SO y dejaran atrás toda la mierda e incompatibilidades que genera la plataforma hasefroch windowsxp, pero ya sería obligar a la gente a pensar, y eso es demasiado.
Claro ...  :rolleyes: