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.
Antworten:
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.
GetFileAttributesist ein Einzeiler
file = "*", dies könnte zurückgegeben werden, trueselbst wenn keine Datei mit dem Namen *
Verwenden Sie GetFileAttributesdiese 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?
Sie können die Funktion nutzen GetFileAttributes. Es wird zurückgegeben, 0xFFFFFFFFwenn die Datei nicht vorhanden ist.
INVALID_FILE_ATTRIBUTESwenn die Datei nicht vorhanden ist. Auf 64-Bit könnte es sein 0xFFFFFFFFFFFFFFFF.
DWORDwie er zurückgeben kann 0xFFFFFFFFFFFFFFFF?
Wie wäre es einfach:
#include <io.h>
if(_access(path, 0) == 0)
... // file exists
Eine weitere Option: 'PathFileExists' .
Aber ich würde wahrscheinlich mitgehen GetFileAttributes.
PathFileExistserfordert die Verwendung von "Shlwapi.dll" (die in einigen Windows-Versionen nicht verfügbar ist) und ist etwas langsamer als GetFileAttributes.
Sie können versuchen, die Datei zu öffnen. Wenn es fehlgeschlagen ist, bedeutet dies, dass es in den meisten Fällen nicht vorhanden ist.
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;
}
_access(0).