2010-10-18 43 views

回答

11

使用SHGetSpecialFolderPath並將CSIDL設置爲所需的文件夾(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)。

您還可以使用較新的SHGetFolderPath()SHGetKnownFolderPath()函數。 還有SHGetKnownFolderIDList(),如果你喜歡COM,那麼有IKnownFolder::GetPath()

+1

請注意,此功能已被取代兩次。你可以給另外兩個(包括當前和推薦的功能)。 – Joey 2010-10-18 23:12:00

+0

@Joey - 我沒有意識到這一點。謝謝。 – Ferruccio 2010-10-18 23:14:35

6

如果我沒有記錯,應該只是

#include <stdlib.h> 
getenv("APPDATA"); 

編輯:剛纔仔細檢查,工作正常!

+3

請改用適當的API,因爲Windows上的環境變量比契約更禮貌。在任何情況下他們可能都不在場。然而,'SHGetKnownFolderPath' * *會每次給你路徑。 – Joey 2010-10-18 23:11:02

+0

但SHGetKnownFolderPath可能不可用。堅果餅乾。 – 2010-10-18 23:46:20

+0

@Hans:雖然SHGetSpecialFolderPath應該是。取決於操作系統的一個目標。 – Joey 2010-10-19 06:19:17

0

您可以使用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); 
+3

改用適當的API,因爲Windows上的環境變量比合約更禮貌。在任何情況下他們可能都不在場。然而,'SHGetKnownFolderPath' * *會每次給你路徑。 – Joey 2010-10-18 23:12:18

+3

能夠基於每個進程覆蓋環境變量很有用。你爲什麼說他們「比禮貌更禮貌」?有這樣的官方或準官方文件嗎? – 2011-02-22 18:37:00

3

使用%APPDATA%環境變量可能會工作的大部分時間。但是,如果您想以官方Windows方式執行此操作,則應使用SHGetFolderPath function,通過CSIDL值CSIDL_APPDATACSIDL_LOCAL_APPDATA,具體取決於您的需要。

這是Environment.GetFolderPath()方法在.NET中使用的。

編輯:喬伊正確地指出,這已被Windows Vista中的SHGetKnownFolderPath所取代。新聞給我:-)。

0

樣品的編號:

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設置\應用數據(非漫遊)

相關問題