[英]How to get the %AppData% folder in C?
如上所述,如何使用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中使用的方法。
编辑: Joey正确地指出这已被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中是:username \\ AppData \\ Roaming
CSIDL_FLAG_CREATE =与CSIDL_值结合使用以强制在SHGetFolderPath()中创建文件夹
您还可以使用:
CSIDL_LOCAL_APPDATA =用户名\\本地设置\\应用程序数据(非漫游)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.