C++ 将字符串解析为LPCWSTR
我正在使用boost文件系统搜索具体路径中的所有文件。 我还想检索此文件的创建数据、上次打开和上次更新,因此在Windows中工作时,我需要使用GetFileTime(这需要句柄,我将通过CreateFile功能获得该句柄) 关键是通过boost文件系统,我得到一个字符串,比如 string filename=“C:\Users\MyUser\Desktop\PDN.pdf” 我需要把这个字符串转换成LPCWSTR 因此,我做了几次尝试,但都失败了,例如:C++ 将字符串解析为LPCWSTR,c++,winapi,boost,boost-filesystem,C++,Winapi,Boost,Boost Filesystem,我正在使用boost文件系统搜索具体路径中的所有文件。 我还想检索此文件的创建数据、上次打开和上次更新,因此在Windows中工作时,我需要使用GetFileTime(这需要句柄,我将通过CreateFile功能获得该句柄) 关键是通过boost文件系统,我得到一个字符串,比如 string filename=“C:\Users\MyUser\Desktop\PDN.pdf” 我需要把这个字符串转换成LPCWSTR 因此,我做了几次尝试,但都失败了,例如: HANDLE hFile = Crea
HANDLE hFile = CreateFile((LPCWSTR)fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
但当这样做时,它成功了:
HANDLE hFile = CreateFile(L"C:\\Users\\MyUSer\\Desktop\\PDN.pdf", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
所以我的问题是,如何使用字符串变量将字符串解析为PWSTR?
如果可能的话(我想没有),是否有任何函数会改变原始路径,在找到另一个斜杠的地方添加一个斜杠
非常感谢
编辑:
这就是我在这里读到的内容后的做法:
wstring fileFullPathWstring=
winAPII.stringToWstring(iter->path().string())
HANDLE hFile=CreateFile(fileFullPathWstring.c_str(),GENERIC_READ,
文件\共享\读取,空,打开\存在,空,空)
使用该功能:
wstring WinAPIIteraction::stringToWstring(string stringName){
int len;
int slength = (int)stringName.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, stringName.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, stringName.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
您可以使用
MultibyteToWideChar()
函数来执行实际转换()。不需要添加斜杠-它们只是转义序列,表示程序代码中的单个'\'
。最简单的解决方案:
wstring filename="C:\Users\MyUser\Desktop\PDN.pdf";
HANDLE hFile = CreateFile(
fileName.c_str(), // std::wstring::c_str returns wchar_t*
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
从ATL中使用:
string filename="C:\Users\MyUser\Desktop\PDN.pdf";
HANDLE hFile = CreateFile(CA2W(fileName.c_str()), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
我知道已经很晚了,但这是我用来将字符串转换为LPCWSTR的方法:
typedef long long long64;
/**Don´t forget to use delete*/
LPCWSTR convStringToLPCWSTR(string String)
{
char *cString = &String[0u];
long64 size = strlen(cString);
wchar_t* wString = new wchar_t[size];
for (long64 i = 0; i < size; i++)
{
wString[i] = cString[i];
}
wString[size] = 0; //important, otherwise Windows will print whatever next in memmory until it finds a zero.
return wString;
}
typedef长64;
/**不要忘记使用delete*/
LPCWSTR convStringToLPCWSTR(字符串)
{
char*cString=&字符串[0u];
long64大小=strlen(cString);
wchar_t*wString=新的wchar_t[size];
对于(long64 i=0;i
string
更可能是LPCSTR
,wstring
是LPCWSTR
-这是UNICODE和ANSI的混合体。最好是一致的。为什么不使用wchar\u t*fileName=“C:\\Users\\MyUSer\\Desktop\\PDN.pdf”?非常感谢!它很有效,但最后我使用了其他方法。但效果非常好:)非常感谢,我使用了这种方式,效果很好:)返回必须删除的内容=糟糕的做法。