如何解决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
参数投射到PCWSTR
(const wchar_t*
):
CreateDirectory((PCWSTR)path,NULL) ...
但是您没有将该字符串转换为UTF-16LE字符串。
因此,您需要将path
转换为wchar_t*
字符串。有一些方法可以执行此操作,请参见Convert char * to LPWSTR。
问题是我给CreateDirectory()
的路径。正如@RemyLebeau指出的那样,我应该使用CreateDirectoryA()
。这项更改解决了这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。