C ++ CreateDirectory无法与APPDATA一起使用

问题描述

我想在%APPDATA%文件夹中创建一个目录。我为此使用CreateDirectory(),它不起作用。我调试了代码,似乎路径正确,但是在APPDATA中看不到新目录。

我在appdata中创建dit的代码:

void setAppDataDir(std::string name)
{
    char* path;
    size_t len;
    _dupenv_s(&path,&len,"APPDATA");
    AppDataPath = path;
    AppDataPath += "\\"+name;

    createDir(this->AppDataPath.c_str());
}

void createDir(const char* path)
{
    assert(CreateDirectory((PCWSTR)path,NULL) || ERROR_ALREADY_EXISTS == GetLastError()); // no exception here
}

这就是我调用该函数的方式:

setAppDataDir("thisistest");

我使用Visual Studio 2019,调试器告诉我,该路径是 C:\\Users\\Micha\AppData\Roaming\\thisistest

我在做什么错了?

解决方法

CreateDirectory()是一个宏,在您的情况下会扩展为CreateDirectoryW(),它需要采用UTF-16LE编码(wchar_t*)的字符串。您正在将const char* path参数投射到PCWSTRconst wchar_t*):

CreateDirectory((PCWSTR)path,NULL) ...

但是您没有将该字符串转换为UTF-16LE字符串。

因此,您需要将path转换为wchar_t*字符串。有一些方法可以执行此操作,请参见Convert char * to LPWSTR

,

问题是我给CreateDirectory()的路径。正如@RemyLebeau指出的那样,我应该使用CreateDirectoryA()。这项更改解决了这个问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...