C++ 用于GetFileAttributes的LPCTSTR类型转换
我正在尝试构建一个方法来查看文件是否存在。 当前的方法形式不完整。 我正试图弄清楚为什么它不能像代码一样工作C++ 用于GetFileAttributes的LPCTSTR类型转换,c++,winapi,casting,C++,Winapi,Casting,我正在尝试构建一个方法来查看文件是否存在。 当前的方法形式不完整。 我正试图弄清楚为什么它不能像代码一样工作 BOOL FileExists(LPCTSTR szPath) { //MessageBox(NULL,szPath,L"File Error",MB_OK); DWORD dwAttrib = GetFileAttributes(szPath); switch(dwAttrib)
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”
是否包含正确的信息?std::string
基于char
,因此当您调用.c_str()
时,可以使用char*
但是LPCWSTR
是指向宽字符串的指针
我相信,如果您在编译时启用了UNICODE
(因此LPCTSTR
=LPCWSTR
),则需要使用std::wstring
相关:
std::string
基于char
,因此当您调用.c_str()
时,可以使用char*
但是LPCWSTR
是指向宽字符串的指针
我相信,如果您在编译时启用了UNICODE
(因此LPCTSTR
=LPCWSTR
),则需要使用std::wstring
相关:
- 强制转换不会将字符串转换为宽字符串。它只是告诉编译器关闭,错误就会移动。您需要文字字符串上的L前缀才能使其成为宽字符串。您需要使用wstring而不是string
std::wstring path = L"C:\\smiley.bmp";
FileExists(path.c_str());
强制转换不会将字符串转换为宽字符串。它只是告诉编译器关闭,错误就会移动。您需要文字字符串上的L前缀才能使其成为宽字符串。您需要使用wstring而不是string
std::wstring path = L"C:\\smiley.bmp";
FileExists(path.c_str());
MessageBox(NULL,(LPCWSTR)dwAttrib,L“文件错误”,MB_OK)什么鬼东西?!?!你到底在干什么?这是灾难的秘诀。请删除它。嗯,它被注释掉了。。。但我确实倾向于使用messagebox来了解发生了什么!将DWORD
转换为LPCWSTR
并将其打印出来不会帮助您找出任何问题。最佳情况:它将打印垃圾。您必须了解这些强制转换的作用。他们不会做你认为他们会做的事。MessageBox(NULL,(LPCWSTR)dwAttrib,L“File Error”,MB_OK)什么鬼东西?!?!你到底在干什么?这是灾难的秘诀。请删除它。嗯,它被注释掉了。。。但我确实倾向于使用messagebox来了解发生了什么!将DWORD
转换为LPCWSTR
并将其打印出来不会帮助您找出任何问题。最佳情况:它将打印垃圾。您必须了解这些强制转换的作用。他们不会做你认为他们会做的事。谢谢你的回答。但是我现在有点迷路了!我需要改变什么?谢谢你的回答。但是我现在有点迷路了!我需要更改什么?好的,我做错了,忘了在path变量中添加“L”。该软件编译得很好,但我仍然遇到了相同的问题“FILE\u INVALID\u FILE\u ID”。我添加了#include,它应该可以工作,因为文件位于该spotOk上,我做得不对,忘记在path变量中添加“L”。该软件编译得很好,但我仍然遇到了相同的问题“FILE\u INVALID\u FILE\u ID”。我补充说#include,它应该可以工作,因为文件就在那里