Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串解析为LPCWSTR_C++_Winapi_Boost_Boost Filesystem - Fatal编程技术网

C++ 将字符串解析为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

我正在使用boost文件系统搜索具体路径中的所有文件。 我还想检索此文件的创建数据、上次打开和上次更新,因此在Windows中工作时,我需要使用GetFileTime(这需要句柄,我将通过CreateFile功能获得该句柄)

关键是通过boost文件系统,我得到一个字符串,比如

string filename=“C:\Users\MyUser\Desktop\PDN.pdf”

我需要把这个字符串转换成LPCWSTR

因此,我做了几次尝试,但都失败了,例如:

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”?非常感谢!它很有效,但最后我使用了其他方法。但效果非常好:)非常感谢,我使用了这种方式,效果很好:)返回必须删除的内容=糟糕的做法。