众所周知,appdata文件夹是这个
C:\Users\*Username*\AppData\Roaming
在 Windows 7 上
由于我的应用程序将部署在各种 Windows 操作系统上,因此我需要能够 100% 地获取文件夹。问题是你如何在 C++ 中做到这一点?因为我不知道确切的 Windows 操作系统,它可能是 XP、Vista 或 7,最重要的是我不知道 用户名 是什么。
原文由 dikidera 发布,翻译遵循 CC BY-SA 4.0 许可协议
众所周知,appdata文件夹是这个
C:\Users\*Username*\AppData\Roaming
在 Windows 7 上
由于我的应用程序将部署在各种 Windows 操作系统上,因此我需要能够 100% 地获取文件夹。问题是你如何在 C++ 中做到这一点?因为我不知道确切的 Windows 操作系统,它可能是 XP、Vista 或 7,最重要的是我不知道 用户名 是什么。
原文由 dikidera 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果有人正在寻找一个简单的实现,这是我的:
#include <windows.h>
#include <shlobj.h>
#include <filesystem>
#include <iostream>
int main(void)
{
std::filesystem::path path;
PWSTR path_tmp;
/* Attempt to get user's AppData folder
*
* Microsoft Docs:
* https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath
* https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid
*/
auto get_folder_path_ret = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &path_tmp);
/* Error check */
if (get_folder_path_ret != S_OK) {
CoTaskMemFree(path_tmp);
return 1;
}
/* Convert the Windows path type to a C++ path */
path = path_tmp;
/* Free memory :) */
CoTaskMemFree(path_tmp);
std::cout << path << std::endl;
return 0;
}
原文由 Phil Loctaux 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答476 阅读✓ 已解决
为了最大限度地兼容所有版本的 Windows,您可以使用
SHGetFolderPath
函数。它要求您为要检索其路径的文件夹指定 CSIDL 值。对于应用程序数据文件夹,这将是
CSIDL_APPDATA
。在 Windows Vista 及更高版本上,您应该改用
SHGetKnownFolderPath
函数,这需要您指定文件夹的KNOWNFOLDERID
值。同样,对于应用程序数据文件夹,适当的值为FOLDERID_RoamingAppData
。要在 C++ 应用程序中使用这些函数中的任何一个,您需要包含
shlobj.h
。