我正在尝试构建一个方法来查看文件是否存在。 目前的方法并不完整。 我试图弄清楚为什么它不像代码那样。
BOOL FileExists(LPCTSTR szPath)
{
//MessageBox(NULL,szPath,L"File Error",MB_OK);
DWORD dwAttrib = GetFileAttributes(szPath);
switch(dwAttrib)
{
case FILE_ATTRIBUTE_DIRECTORY:
MessageBox(NULL,L"FILE_ATTRIBUTE_DIRECTORY",L"File Error",MB_OK);
break;
case FILE_ATTRIBUTE_ARCHIVE:
MessageBox(NULL,L"FILE_ATTRIBUTE_ARCHIVE",L"File Error",MB_OK);
break;
case FILE_READ_ONLY_VOLUME:
MessageBox(NULL,L"FILE_READ_ONLY_VOLUME",L"File Error",MB_OK);
break;
case FILE_INVALID_FILE_ID:
MessageBox(NULL,L"FILE_INVALID_FILE_ID",L"File Error",MB_OK);
break;
default:
MessageBox(NULL,(LPCWSTR)dwAttrib,L"File Error",MB_OK);
break;
}
return true;
}
这就是我称之为方法的方法:
FileExists((LPCWSTR)path.c_str());
这是我的文件所在的位置:
std::string path = "C:\\smiley.bmp"
我总是在这里结束,不知道交换机编码的顺序是什么:
FILE_INVALID_FILE_ID
我想知道我的类型转换是否正确"LPCTSTR"
。
因为我尝试使用MessageBox来显示"szPath"
的内容,并且它显示为人类不可兑换的格式。
我提供的路径是正确的,正确转义。
如何检查"szPath"
是否包含正确的信息?
答案 0 :(得分:4)
std::string
基于char
,因此当您致电.c_str()
时,您可以char *
。
但是LPCWSTR
是指向宽字符字符串的指针。
我相信,如果您在启用UNICODE
的情况下进行编译(因此LPCTSTR
== LPCWSTR
),则需要使用std::wstring
。
相关:
答案 1 :(得分:1)
Casting不会将字符串转换为宽字符串。它只是告诉编译器关闭,错误将移动。您需要文字字符串上的L前缀才能使它们成为宽字符串。而且你需要使用wstring而不是string。
std::wstring path = L"C:\\smiley.bmp";
FileExists(path.c_str());