¿Cómo podemos verificar si un archivo existe o no con un programa Win32? Estoy trabajando para una aplicación de Windows Mobile.¿Cómo podemos verificar si un archivo existe o no con el programa Win32?
Respuesta
Puede llamar al FindFirstFile
.
Este es un ejemplo que acabo de Knocked Up:
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int fileExists(TCHAR * file)
{
WIN32_FIND_DATA FindFileData;
HANDLE handle = FindFirstFile(file, &FindFileData) ;
int found = handle != INVALID_HANDLE_VALUE;
if(found)
{
//FindClose(&handle); this will crash
FindClose(handle);
}
return found;
}
void _tmain(int argc, TCHAR *argv[])
{
if(argc != 2)
{
_tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
return;
}
_tprintf (TEXT("Looking for file is %s\n"), argv[1]);
if (fileExists(argv[1]))
{
_tprintf (TEXT("File %s exists\n"), argv[1]);
}
else
{
_tprintf (TEXT("File %s doesn't exist\n"), argv[1]);
}
}
Puede hacer uso de la función GetFileAttributes
. Devuelve 0xFFFFFFFF
si el archivo no existe.
interesante historia sobre GetFileAttributes y por qué es el método preferido en el código de Windows por Raymond Chen: http://blogs.msdn.com/b/oldnewthing/archive/2007/10/23/5612082.aspx –
Debe verificar que el objeto sea un directorio. –
En realidad, devuelve 'INVALID_FILE_ATTRIBUTES' si el archivo no existe. En 64 bits podría ser '0xFFFFFFFFFFFFFFFF'. –
Uso GetFileAttributes
para comprobar que existe el objeto del sistema de archivos y que no es un directorio.
BOOL FileExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
Copiado del How do you check if a directory exists on Windows in C?
+1 debido a un ejemplo de código corto. Los ejemplos de código son un ahorro de tiempo para comenzar. – nalply
Me gustaría señalar que su función devuelve bool y no BOOL. –
Para C++ sí, para C, es un BOOL –
Usted puede tratar de abrir el archivo. Si falló, significa que no existe en la mayoría del tiempo.
Iría con CreateFile -> CloseHandle. más fácil y más barato. – OSH
Un archivo abierto también puede fallar si los archivos existen pero el usuario no tiene suficientes privilegios para abrir el archivo. En estos días, esa es una ** muy ** situación común. – JackLThornton
Otra opción: 'PathFileExists'.
Pero probablemente vaya con GetFileAttributes
.
Además 'PathFileExists' requiere el uso de" Shlwapi.dll "(que no está disponible en algunas versiones de Windows) y es un poco más lento que' GetFileAttributes'. – Bitterblue
+1 para esta buena alternativa –
Pero no le dice si existió un archivo o directorio. –
Otra más genérico manera no ventanas:
static bool FileExists(const char *path)
{
FILE *fp;
fpos_t fsize = 0;
if (!fopen_s(&fp, path, "r"))
{
fseek(fp, 0, SEEK_END);
fgetpos(fp, &fsize);
fclose(fp);
}
return fsize > 0;
}
si va a use fopen et al. También puede usar '_access (0)'. –
¿Qué hay de simplemente:
#include <io.h>
if(_access(path, 0) == 0)
... // file exists
- 1. Cómo verificar si existe un archivo con el script VB
- 2. ¿cómo puedo verificar si existe un archivo?
- 3. ¿Cómo puedo verificar si existe o no un recurso incrustado?
- 4. ¿Cómo verificar un div existe o no?
- 5. ¿Cómo verificar si la sesión existe o no?
- 6. Intentando verificar si existe un archivo en el almacenamiento interno
- 7. ¿Cómo puedo verificar si existe un archivo usando Emacs Lisp?
- 8. comprobando si existe o no un paquete
- 9. Cómo verificar si existe un archivo específico en el directorio o cualquiera de sus subdirectorios
- 10. ¿Cómo puedo verificar si existe un archivo en Perl?
- 11. ¿Cómo verificar el directorio existe o no en Linux.?
- 12. "Crear tabla si no existe": ¿cómo verificar el esquema también?
- 13. ¿Cómo puedo verificar si el archivo existe en Makefile?
- 14. ¿Cómo ver si existe un directorio o no en Perl?
- 15. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 16. ¿Cómo puedo verificar si el archivo existe y, si no, matar la compilación?
- 17. ¿Cómo verificar si existe un cierto ensamblaje?
- 18. ¿Cómo verificar si existe un usuario postgres?
- 19. ¿Cómo verificar si existe un procedimiento almacenado?
- 20. EXTJS - ¿Cómo verificar si el elemento existe?
- 21. ¿Cómo puedo verificar si existe un directorio?
- 22. ¿Cómo podemos verificar que la tabla tenga índice o no?
- 23. ¿Puedo verificar si existe un archivo en una URL?
- 24. Cómo verificar si existe un directorio/archivo/enlace simbólico con un comando en Ruby
- 25. Crear archivo si no existe el archivo
- 26. ¿Cómo verificar si un archivo existe en un archivo .BAT de DOS (Windows Command Prompt)?
- 27. .htaccess redirigir si el archivo no existe
- 28. ¿Manera pitónica de verificar si existe un archivo?
- 29. ¿Puedo verificar si existe un archivo en una URL?
- 30. ifstream: cómo saber si el archivo especificado no existe
Olvidó llamar a 'FindClose'. Y no puede devolver un valor de una función vacía. –
@DavidHeffernan - corregido - gracias. –
Mitad corregida. Debe verificar FILE_ATTRIBUTE_DIRECTORY. –