如上所述,我如何获得在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_APPDATA
或CSIDL_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 =用户名\本地设置\应用程序数据(非漫游)