我想验证文件的存在,经过一番搜索,我认为 PathFileExists() 可能适合这项工作。但是,以下代码始终显示该文件不存在。为确保文件真实存在,我选择 cmd.exe 的完整路径作为测试文件路径。我正在使用 Windows 7 (x64)
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <shlwapi.h>
#include <WinDef.h>
#pragma comment( lib, "shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
char path[] = "c:\\Windows\\System32\\cmd.exe";
LPCTSTR szPath = (LPCTSTR)path;
if(!PathFileExists(szPath))
{
printf("not exist\n");
}else{
printf("exists!\n");
}
return 0;
}
你能解释一下这个问题吗?
更新
花几乎整个下午的时间来找出问题所在。PathFileExists() 函数需要类型的第二个参数。LPCTSTR
但是,编译器无法正确转换char *
为LPCTSTR
然后我包含tchar.h
并使用TEXT
宏来初始化指针。完毕。LPCTSTR lpPath = TEXT("c:\Windows\System32\cmd.exe"); PathFileExists() 的 MSDN 参考示例代码有点过时。直接用于 PathFileExists()的参考示例char *
,在 Visual Studio 2011 beta 中无法通过编译。而且,示例代码错过了using namespace std;
其中,我认为@steveha 的答案最接近真正的问题。谢谢大家。
最终的工作代码如下所示:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <shlwapi.h>
#include <WinDef.h>
#include <tchar.h>
#pragma comment( lib, "shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR lpPath = TEXT("c:\\Windows\\System32\\cmd.exe");
if( PathFileExists(lpPath) == FALSE)
{
printf("not exist\n");
}else{
printf("exists!\n");
}
return 0;
}
很抱歉在这里添加解决方案,但我真的想在整个下午的工作后发表一些想法,希望对其他新手有所帮助。