如上所述,如何使用 C 获取 Windows 中的 AppData 文件夹?
我知道你使用 C#Environment.SpecialFolder.ApplicationData
使用SHGetSpecialFolderPath并将CSIDL设置为所需的文件夹(可能是 CSIDL_APPDATA 或 CSIDL_LOCAL_APPDATA)。
您还可以使用较新的SHGetFolderPath()和SHGetKnownFolderPath()函数。还有SHGetKnownFolderIDList(),如果你喜欢 COM,还有IKnownFolder::GetPath()。
如果我没记错的话应该是
#include <stdlib.h>
getenv("APPDATA");
编辑:刚刚仔细检查,工作正常!
大多数情况下,使用%APPDATA%
环境变量可能会起作用。但是,如果您想以官方 Windows 方式执行此操作,您应该使用SHGetFolderPath
函数,传递 CSIDL 值CSIDL_APPDATA
或CSIDL_LOCAL_APPDATA
,这取决于您的需要。
这就是该Environment.GetFolderPath()
方法在 .NET 中使用的方法。
编辑:乔伊正确地指出,这已被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 = 用户名\应用程序数据。在 Window 10 中是:用户名\AppData\Roaming
CSIDL_FLAG_CREATE = 结合 CSIDL_ 值强制在 SHGetFolderPath() 中创建文件夹
您还可以使用:
CSIDL_LOCAL_APPDATA = 用户名\本地设置\应用程序数据(非漫游)