8

如上所述,如何使用 C 获取 Windows 中的 AppData 文件夹?

我知道你使用 C#Environment.SpecialFolder.ApplicationData

4

5 回答 5

13

使用SHGetSpecialFolderPath并将CSIDL设置为所需的文件夹(可能是 CSIDL_APPDATA 或 CSIDL_LOCAL_APPDATA)。

您还可以使用较新的SHGetFolderPath()SHGetKnownFolderPath()函数。还有SHGetKnownFolderIDList(),如果你喜欢 COM,还有IKnownFolder::GetPath()

于 2010-10-18T23:04:00.610 回答
7

如果我没记错的话应该是

#include <stdlib.h>
getenv("APPDATA");

编辑:刚刚仔细检查,工作正常!

于 2010-10-18T23:03:02.160 回答
4

大多数情况下,使用%APPDATA%环境变量可能会起作用。但是,如果您想以官方 Windows 方式执行此操作,您应该使用SHGetFolderPath函数,传递 CSIDL 值CSIDL_APPDATACSIDL_LOCAL_APPDATA,这取决于您的需要。

这就是该Environment.GetFolderPath()方法在 .NET 中使用的方法。

编辑:乔伊正确地指出,这已被Windows Vista 中的SHGetKnownFolderPath取代。给我的消息:-)。

于 2010-10-18T23:07:35.533 回答
1

您可能会使用这些功能

#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);
于 2010-10-18T23:04:29.703 回答
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 中是:用户名\AppData\Roaming

CSIDL_FLAG_CREATE = 结合 CSIDL_ 值强制在 SHGetFolderPath() 中创建文件夹

您还可以使用:

CSIDL_LOCAL_APPDATA = 用户名\本地设置\应用程序数据(非漫游)

于 2016-10-17T15:11:54.623 回答