我们如何使用Win32程序检查文件是否存在?我正在为Windows Mobile应用程序工作。
Answers:
您可以致电FindFirstFile
。
这是我刚敲过的一个样本:
#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()
好多了。
GetFileAttributes
是一个班轮
file = "*"
,true
即使没有名为*的文件,这也可能返回
使用GetFileAttributes
检查文件系统对象存在,它不是一个目录。
BOOL FileExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
您可以使用该功能GetFileAttributes
。0xFFFFFFFF
如果文件不存在,则返回。
INVALID_FILE_ATTRIBUTES
如果文件不存在,它将返回。在64位上可能是0xFFFFFFFFFFFFFFFF
。
DWORD
如何返回的0xFFFFFFFFFFFFFFFF
?
简单地说:
#include <io.h>
if(_access(path, 0) == 0)
... // file exists
另一个选项: “ PathFileExists”。
但我可能会同意GetFileAttributes
。
PathFileExists
需要使用“ Shlwapi.dll”(在某些Windows版本中不可用),并且比慢一些GetFileAttributes
。
您可以尝试打开文件。如果失败,则表示大多数时间不存在。
另一种更通用的非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)
。