2010-05-24 32 views

回答

41

使用SHGetFolderPathCSIDL_COMMON_APPDATA作爲CSIDL。

TCHAR szPath[MAX_PATH]; 
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath))) 
{ 
    //.... 
} 
+0

不錯,CSIDL_COMMON_APPDATA是我正在尋找的CSIDL。 – 2010-05-24 17:54:55

+4

還有更新的,並且不一定很炫的SHGetKnownFolderPath。可用於Vista或更高版本。 – OldFart 2010-05-24 20:36:11

+2

我也想補充一點,那就是CSIDL_APPDATA這是用戶特定的版本。 (COMMON_APPDATA在所有用戶之間共享) – 2014-12-07 20:17:49

-4

你也可以從註冊表中讀取值

路徑= HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Explorer中\ Shell文件夾

鍵= 常見AppData的

+0

我想是否可以。 – 2010-05-24 18:50:03

+9

無證並可能隨時更改;躲開它。有API,使用它。 – 2010-05-24 20:00:46

+2

請注意,「有待更改」狀態在Win32世界中可能會發生變化。 – ActiveTrayPrntrTagDataStrDrvr 2012-11-13 09:10:19

15

只是爲了提供interjay的回答

  1. 我不得不包括shlobj.h才能使用SHGetFolderPath

  2. 通常你可能需要從應用程序數據讀取文件, 要做到這一點,你需要使用pathAppend功能(需要對這個shlwapi.h)。

#include <shlwapi.h> 
#pragma comment(lib,"shlwapi.lib") 
#include "shlobj.h" 

TCHAR szPath[MAX_PATH]; 
// Get path for each computer, non-user specific and non-roaming data. 
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath))) 
{ 
    // Append product-specific path 
    PathAppend(szPath, _T("\\My Company\\My Product\\1.0\\")); 
} 

詳情請參閱here

+1

+1和一個註釋:要使用_T(「...」),您必須#include ' – jyz 2013-08-11 20:46:18

+0

您應該使用'TEXT()'宏而不是'_T()'宏(或停止完全使用「TCHAR」 - 除非你確實需要支持Win9x/ME)。 Win32 API使用'TEXT()',C運行時庫使用'_T()'。 – 2014-08-25 22:49:13

相關問題