如上所述,如何在Windows中使用C獲取AppData文件夾?如何獲取C中的%AppData%文件夾?
我知道,C#使用Environment.SpecialFolder.ApplicationData
如上所述,如何在Windows中使用C獲取AppData文件夾?如何獲取C中的%AppData%文件夾?
我知道,C#使用Environment.SpecialFolder.ApplicationData
使用SHGetSpecialFolderPath並將CSIDL設置爲所需的文件夾(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)。
您還可以使用較新的SHGetFolderPath()和SHGetKnownFolderPath()函數。 還有SHGetKnownFolderIDList(),如果你喜歡COM,那麼有IKnownFolder::GetPath()。
如果我沒有記錯,應該只是
#include <stdlib.h>
getenv("APPDATA");
編輯:剛纔仔細檢查,工作正常!
您可以使用these functions:
#include <stdlib.h>
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
像這樣:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
改用適當的API,因爲Windows上的環境變量比合約更禮貌。在任何情況下他們可能都不在場。然而,'SHGetKnownFolderPath' * *會每次給你路徑。 – Joey 2010-10-18 23:12:18
能夠基於每個進程覆蓋環境變量很有用。你爲什麼說他們「比禮貌更禮貌」?有這樣的官方或準官方文件嗎? – 2011-02-22 18:37:00
使用%APPDATA%
環境變量可能會工作的大部分時間。但是,如果您想以官方Windows方式執行此操作,則應使用SHGetFolderPath
function,通過CSIDL值CSIDL_APPDATA
或CSIDL_LOCAL_APPDATA
,具體取決於您的需要。
這是Environment.GetFolderPath()
方法在.NET中使用的。
編輯:喬伊正確地指出,這已被Windows Vista中的SHGetKnownFolderPath所取代。新聞給我:-)。
樣品的編號:
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("MySettings.xml"));
HANDLE hFile = CreateFile(szPath, ...);
}
CSIDL_APPDATA =用戶名\應用數據。在窗10:名\ AppData \漫遊
CSIDL_FLAG_CREATE =與CSIDL_值相結合,強制的SHGetFolderPath()創建文件夾
您還可以使用:
CSIDL_LOCAL_APPDATA =用戶名\ Local設置\應用數據(非漫遊)
請注意,此功能已被取代兩次。你可以給另外兩個(包括當前和推薦的功能)。 – Joey 2010-10-18 23:12:00
@Joey - 我沒有意識到這一點。謝謝。 – Ferruccio 2010-10-18 23:14:35