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