Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: k3r00t en 29 Julio 2012, 01:18 am



Título: Duda con Archivos en C++
Publicado por: k3r00t en 29 Julio 2012, 01:18 am
Buenas, alguno sabe que sentencia puedo usar en C++ para verificar si cierto archivo existe y dependiendo de la respuesta hacer cierta accion? Basicamente lo que necesito es:

Si(Archivo_Existe_en_la_ruta)
  hago_algo()
sino
  hago_otra_cosa()

He leido en varios sitios pero ninguno resuelve mi duda, de antemano gracias.

PD: No me refiero a si el archivo pudo ser abierto con exito o no, sino que si existe o no, gracias!!


Título: Re: Duda con Archivos en C++
Publicado por: Queta en 29 Julio 2012, 01:43 am
Puedes usar fopen (http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ (http://www.cplusplus.com/reference/clibrary/cstdio/fopen/)) perfectamente.


Título: Re: Duda con Archivos en C++
Publicado por: rir3760 en 29 Julio 2012, 04:33 am
No me refiero a si el archivo pudo ser abierto con exito o no, sino que si existe o no,
Utilizando solo la biblioteca estándar de C o C++ no es posible realizar la operación que mencionas, debes utilizar el API de tu sistema operativo.


Puedes usar fopen perfectamente.
No es correcto utilizar "fopen" porque:

A) Si esta tiene éxito el archivo existe, OK.
B) Si no tiene éxito no se puede asumir lo contrario (el archivo no existe) ya que la función puede fallar por otras razones (falla del dispositivo, falta de privilegios, etc.).

Un saludo


Título: Re: Duda con Archivos en C++
Publicado por: ecfisa en 29 Julio 2012, 08:21 am
Hola k3r00t.

Si estas utilizando windows podes utilizar la función API FindFirstFile , por ejemplo:

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. bool FileExists(const TCHAR *aName);
  5.  
  6. int main() {
  7.  if (FileExists("C:\\ARCHIVO.TXT"))
  8.    printf("Existe, hacer algo");
  9.  else
  10.    printf("No existe, hacer otra cosa");
  11.  return 0;
  12. }
  13.  
  14. bool FileExists(const TCHAR *aName) {
  15.  WIN32_FIND_DATA lpFindFileData;
  16.  
  17.  if (FindFirstFile(aName, &lpFindFileData ) == INVALID_HANDLE_VALUE)
  18.    return false;
  19.  return true;
  20. }
  21.  

Saludos.