如上所述,如何使用C?
在Windows中获取AppData文件夹我知道对于C#,你使用Environment.SpecialFolder.ApplicationData
答案 0 :(得分:12)
使用SHGetSpecialFolderPath并将CSIDL设置为所需的文件夹(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)。
您还可以使用较新的SHGetFolderPath()和SHGetKnownFolderPath()功能。 还有SHGetKnownFolderIDList(),如果你喜欢COM,那就是IKnownFolder::GetPath()。
答案 1 :(得分:7)
如果我没记错的话应该只是
#include <stdlib.h>
getenv("APPDATA");
编辑:只需仔细检查,工作正常!
答案 2 :(得分:4)
使用%APPDATA%
环境变量可能在大多数时间都有效。但是,如果您希望以官方Windows方式执行此操作,则应使用SHGetFolderPath
function,并根据您的需要传递CSIDL值CSIDL_APPDATA
或CSIDL_LOCAL_APPDATA
。
这是Environment.GetFolderPath()
方法在.NET中使用的方法。
编辑:Joey正确指出在Windows Vista中已被SHGetKnownFolderPath取代。给我的消息: - )。
答案 3 :(得分:1)
您可以使用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);
答案 4 :(得分: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 =用户名\应用程序数据。在Window 10中是:username \ AppData \ Roaming
CSIDL_FLAG_CREATE =与CSIDL_值结合以强制在SHGetFolderPath()中创建文件夹
您也可以使用:
CSIDL_LOCAL_APPDATA =用户名\本地设置\应用程序数据(非漫游)