簡體   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