繁体   English   中英

如何在C中获取%AppData%文件夹?

[英]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_APPDATACSIDL_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM