Wie können wir überprüfen, ob eine Datei vorhanden ist oder nicht, wenn Sie ein Win32-Programm verwenden? Ich arbeite für eine Windows Mobile App.
74
Sie können anrufen FindFirstFile
.
Hier ist ein Beispiel, das ich gerade angeklopft habe:
#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]);
}
}
GetFileAttributes()
ist viel besser.GetFileAttributes
ist ein Einzeilerfile = "*"
, dies könnte zurückgegeben werden,true
selbst wenn keine Datei mit dem Namen *Verwenden Sie
GetFileAttributes
diese Option, um zu überprüfen, ob das Dateisystemobjekt vorhanden ist und kein Verzeichnis ist.BOOL FileExists(LPCTSTR szPath) { DWORD dwAttrib = GetFileAttributes(szPath); return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); }
Kopiert von Wie überprüfen Sie, ob unter Windows in C ein Verzeichnis vorhanden ist?
quelle
Sie können die Funktion nutzen
GetFileAttributes
. Es wird zurückgegeben,0xFFFFFFFF
wenn die Datei nicht vorhanden ist.quelle
INVALID_FILE_ATTRIBUTES
wenn die Datei nicht vorhanden ist. Auf 64-Bit könnte es sein0xFFFFFFFFFFFFFFFF
.DWORD
wie er zurückgeben kann0xFFFFFFFFFFFFFFFF
?Wie wäre es einfach:
#include <io.h> if(_access(path, 0) == 0) ... // file exists
quelle
Eine weitere Option: 'PathFileExists' .
Aber ich würde wahrscheinlich mitgehen
GetFileAttributes
.quelle
PathFileExists
erfordert die Verwendung von "Shlwapi.dll" (die in einigen Windows-Versionen nicht verfügbar ist) und ist etwas langsamer alsGetFileAttributes
.Sie können versuchen, die Datei zu öffnen. Wenn es fehlgeschlagen ist, bedeutet dies, dass es in den meisten Fällen nicht vorhanden ist.
quelle
Ein weiterer allgemeinerer Weg ohne Windows:
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; }
quelle
_access(0)
.