Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中获取%AppData%文件夹?_C_Windows_Appdata - Fatal编程技术网

如何在C中获取%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在Windows中获取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, ...);
}