如何获得C中的%AppData%文件夹?

如上所述,我如何获得在Windows中使用C的AppData文件夹?

我知道对于C#你使用Environment.SpecialFolder.ApplicationData

将CSIDL设置为所需的文件夹(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)使用SHGetSpecialFolderPath 。

您也可以使用较新的SHGetFolderPath()和SHGetKnownFolderPath()函数。 还有SHGetKnownFolderIDList() ,如果你喜欢COM的IKnownFolder :: GetPath() 。

如果我记得正确的话应该是

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

编辑:只需双重检查,工作正常!

使用%APPDATA%环境变量可能会在大多数情况下工作。 但是,如果您想以正式的Windows方式执行此操作,则应使用SHGetFolderPath函数 ,根据您的需要传递CSIDL值CSIDL_APPDATACSIDL_LOCAL_APPDATA

这就是.NET中使用的Environment.GetFolderPath()方法。

编辑:乔伊正确地指出,这已被替换为Windows Vista中的SHGetKnownFolderPath 。 新闻给我:-)。

你可以使用这些功能 :

 #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); 

示例代码:

 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 =用户名\本地设置\应用程序数据(非漫游)