我们如何使用Win32程序检查文件是否存在?我正在为Windows Mobile App工作。
答案 0 :(得分:187)
使用GetFileAttributes
检查文件系统对象是否存在,以及它不是目录。
BOOL FileExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
复制
答案 1 :(得分:32)
您可以使用GetFileAttributes
功能。如果文件不存在,则返回0xFFFFFFFF
。
答案 2 :(得分:22)
您可以拨打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]);
}
}
答案 3 :(得分:16)
简单地说:
#include <io.h>
if(_access(path, 0) == 0)
... // file exists
答案 4 :(得分:7)
另一种选择:'PathFileExists'。
但我可能会选择GetFileAttributes
。
答案 5 :(得分:1)
您可以尝试打开该文件。如果失败,则意味着大部分时间都不存在。
答案 6 :(得分:0)
遇到了同样的问题,并在另一个使用 forum 方法的 GetFileAttributes 中找到了这个简短的代码
DWORD dwAttr = GetFileAttributes(szPath);
if (dwAttr == 0xffffffff){
DWORD dwError = GetLastError();
if (dwError == ERROR_FILE_NOT_FOUND)
{
// file not found
}
else if (dwError == ERROR_PATH_NOT_FOUND)
{
// path not found
}
else if (dwError == ERROR_ACCESS_DENIED)
{
// file or directory exists, but access is denied
}
else
{
// some other error has occured
}
}else{
if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
{
// this is a directory
}
else
{
// this is an ordinary file
}
}
其中 szPath
是文件路径。
答案 7 :(得分:-1)
另一种更通用的非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;
}