[英]C++ CreateDirectory() not working with 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
}
这就是我对 function 的称呼:
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*
字符串。 有一些方法可以做到这一点,请参阅将 char * 转换为 LPWSTR 。
问题是我给CreateDirectory()
路径的方式。 正如@RemyLebeau 指出的那样,我应该使用CreateDirectoryA()
。 此更改解决了该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.