Есть два распространенных способа сделать это в коде Windows. GetFileAttributes и CreateFile,
bool DoesFileExist(LPCWSTR pszFilename)
{
DWORD dwAttrib = GetFileAttributes(pszFilename);
if ( ! (dwAttrib & FILE_ATTRIBUTE_DEVICE) &&
! (dwAttrib & FILE_ATTRIBUTE_DIRECTORY))
{
return true;
}
return false;
}
Это скажет вам, что файл существует, но не скажет, есть ли у вас доступ к нему. для этого вам нужно использовать CreateFile.
bool DoesFileExist(LPCWSTR pszFilename)
{
HANDLE hf = CreateFile(pszFilename,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE != hf)
{
CloseHandle(hf);
return true;
}
else if (GetLastError() == ERROR_SHARING_VIOLATION)
{
// should we return 'exists but you can't access it' here?
return true;
}
return false;
}
Но помните, что даже если вы вернете истину после одного из этих вызовов, файл может все еще не существовать к тому времени, когда вы сможете открыть его. Во многих случаях лучше всего вести себя так, как будто файл существует, и изящно обрабатывать ошибки, когда его нет.