• Viernes 8 de Noviembre de 2024, 20:42

Autor Tema:  Cómo Saber Si Un Archivo Existe?  (Leído 2266 veces)

Señor X²

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Cómo Saber Si Un Archivo Existe?
« en: Martes 31 de Octubre de 2006, 05:52 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #1 en: Martes 31 de Octubre de 2006, 09:18 »
0
Una forma simple de saberlo es usar GetFileAttributes:
http://msdn.microsoft.com/library/default....eattributes.asp

Si te devuelve INVALID_FILE_ATTRIBUTES es que el archivo no existe.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

boheme

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #2 en: Martes 31 de Octubre de 2006, 09:58 »
0
Tan fácil como:

FileExists("ruta_archivo");


o también

AnsiString directorio_de_trabajo = ExtractFileDir(Application->ExeName);
FileExists(directorio_de_trabajo + "\\archivo_relativo");

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #3 en: Martes 31 de Octubre de 2006, 10:55 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Señor X²

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #4 en: Martes 31 de Octubre de 2006, 16:09 »
0
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

boheme

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #5 en: Martes 31 de Octubre de 2006, 17:53 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #6 en: Martes 31 de Octubre de 2006, 18:11 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

boheme

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #7 en: Jueves 2 de Noviembre de 2006, 13:56 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cómo Saber Si Un Archivo Existe?
« Respuesta #8 en: Jueves 2 de Noviembre de 2006, 13:59 »
0
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:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.