如何在C中获取%AppData%文件夹?
如上所述,如何使用C在Windows中获取AppData文件夹如何在C中获取%AppData%文件夹?,c,windows,appdata,C,Windows,Appdata,如上所述,如何使用C在Windows中获取AppData文件夹 我知道对于C#来说,您使用的是环境.SpecialFolder.ApplicationData,如果我没记错的话,应该是 #include <stdlib.h> getenv("APPDATA"); #包括 getenv(“APPDATA”); 编辑:只是双重检查,工作正常 与所需文件夹(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)的集合一起使用 您还可以使用更新的和功能。 还有,如果您
我知道对于C#来说,您使用的是
环境.SpecialFolder.ApplicationData
,如果我没记错的话,应该是
#include <stdlib.h>
getenv("APPDATA");
#包括
getenv(“APPDATA”);
编辑:只是双重检查,工作正常 与所需文件夹(可能是CSIDL_APPDATA或CSIDL_LOCAL_APPDATA)的集合一起使用
您还可以使用更新的和功能。
还有,如果您喜欢COM,也有。您可以使用:
#包括
char*getenv(
常量字符*varname
);
wchar_t*_wgetenv(
常量wchar\u t*varname
);
像这样:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
#包括
char*appData=getenv(“appData”);
printf(“%s\n”,appData);
使用%APPDATA%
环境变量可能在大部分时间都有效。但是,如果您希望以官方Windows方式执行此操作,则应使用,根据需要传递CSIDL值CSIDL\u APPDATA
或CSIDL\u LOCAL\u APPDATA
这就是Environment.GetFolderPath()
方法在.NET中使用的内容
编辑:乔伊正确地指出,这已被Windows Vista中的替换。给我的新闻:-)。示例代码:
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\Roaming
CSIDL_FLAG_CREATE=与CSIDL_值组合,以强制在SHGetFolderPath()中创建文件夹
您还可以使用:
CSIDL\u LOCAL\u APPDATA=username\LOCAL Settings\Application Data(非漫游)请使用适当的API,因为Windows上的环境变量与其说是合同,不如说是礼貌。他们可能并非在所有情况下都在场。但是,
SHGetKnownFolderPath
每次都会为您提供路径。但是SHGetKnownFolderPath也可能不可用。硬饼干。@Hans:SHGetSpecialFolderPath应该是。取决于OS one的目标。请注意,此功能已被取代两次。你最好给另外两个(包括当前和推荐的函数)。@Joey-我还没意识到。谢谢。改用合适的API,因为Windows上的环境变量与其说是合同,不如说是礼貌。他们可能并非在所有情况下都在场。但是,SHGetKnownFolderPath
每次都会为您提供路径。能够在每个进程的基础上重写环境变量非常有用。你为什么说他们“更像是一种礼貌而不是一份合同”?是否有相关的官方或准官方文件?
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, ...);
}