【发布时间】:2024-07-24 13:05:02
【问题描述】:
如上,如何使用 C 语言获取 Windows 中的 AppData 文件夹?
我知道对于 C#,您使用 Environment.SpecialFolder.ApplicationData
【问题讨论】:
如上,如何使用 C 语言获取 Windows 中的 AppData 文件夹?
我知道对于 C#,您使用 Environment.SpecialFolder.ApplicationData
【问题讨论】:
如果我没记错的话应该是
#include <stdlib.h>
getenv("APPDATA");
编辑:仔细检查,工作正常!
【讨论】:
SHGetKnownFolderPath会每次都给你路径。
使用 SHGetSpecialFolderPath 并将 CSIDL 设置为所需的文件夹(可能是 CSIDL_APPDATA 或 CSIDL_LOCAL_APPDATA)。
您还可以使用较新的 SHGetFolderPath() 和 SHGetKnownFolderPath() 函数。 还有SHGetKnownFolderIDList(),如果你喜欢COM,还有IKnownFolder::GetPath()。
【讨论】:
你可以使用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);
【讨论】:
SHGetKnownFolderPath会每次都给你路径。
使用%APPDATA% 环境变量可能大部分时间都有效。但是,如果您想以官方 Windows 方式执行此操作,则应使用 SHGetFolderPath function,传递 CSIDL 值 CSIDL_APPDATA 或 CSIDL_LOCAL_APPDATA,具体取决于您的需要。
这就是 Environment.GetFolderPath() 方法在 .NET 中使用的内容。
编辑: Joey 正确地指出,在 Windows Vista 中这已被 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, ...);
}
CSIDL_APPDATA = 用户名\应用程序数据。在 Window 10 中是:username\AppData\Roaming
CSIDL_FLAG_CREATE = 结合 CSIDL_ 值强制在 SHGetFolderPath() 中创建文件夹
你也可以使用:
CSIDL_LOCAL_APPDATA = 用户名\本地设置\应用程序数据(非漫游)
【讨论】: