繁体   English   中英

C++ CreateDirectory() 不适用于 APPDATA

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM