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

时间:2010-10-18 23:00:02

标签: c windows appdata

如上所述,如何使用C?

在Windows中获取AppData文件夹

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

5 个答案:

答案 0 :(得分:12)

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

您还可以使用较新的SHGetFolderPath()SHGetKnownFolderPath()功能。 还有SHGetKnownFolderIDList(),如果你喜欢COM,那就是IKnownFolder::GetPath()

答案 1 :(得分:7)

如果我没记错的话应该只是

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

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

答案 2 :(得分:4)

使用%APPDATA%环境变量可能在大多数时间都有效。但是,如果您希望以官方Windows方式执行此操作,则应使用SHGetFolderPath function,并根据您的需要传递CSIDL值CSIDL_APPDATACSIDL_LOCAL_APPDATA

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

编辑:Joey正确指出在Windows Vista中已被SHGetKnownFolderPath取代。给我的消息: - )。

答案 3 :(得分:1)

您可以使用these functions

#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);

答案 4 :(得分: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中是:username \ AppData \ Roaming

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

您也可以使用:

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