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
}

我是这样调用函数的:

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()。此更改解决了问题。