【问题标题】:What is the best way to get user appdata folder location on windows? [duplicate]在 Windows 上获取用户 appdata 文件夹位置的最佳方法是什么? [复制]
【发布时间】:2021-11-12 06:57:17
【问题描述】:

我正在为 Windows 编写一个应用程序,我需要找到 appdata 文件夹的位置,以便将 appdata 保存到其中。我正在使用 C++。当我对此进行一些研究时,我找到了一些答案,例如"getenv("APPDATA")"。我可以使用它,但该问题已在 2012 年得到解答,因此在 2021 年现在可能会有更好的方法来解决此问题。感谢您的帮助!

#include <iostream>

int main() {
    std::string appdataLocation;
    //TODO: Find appdata folder location.
    //enter code here
    std::cout << appdataLocation << '\n';
}

有些人一直认为这是一个重复的问题。这个问题是 10 年前提出的。现在可能有更好的方法可以做到这一点,这就是我问的原因。

【问题讨论】:

  • 不,windows API 没有那么快,老问题仍然存在

标签: c++


【解决方案1】:

您也可以使用 Windows API:

    TCHAR appdata[MAX_PATH] = {0};
    SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata);

https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetfolderpatha

【讨论】:

  • 奇怪。我尝试使用它,但运行程序没有打印任何东西。 cpp #include &lt;iostream&gt; #include &lt;windows.h&gt; int main() { std::string appdata; TCHAR appdata[MAX_PATH] = {0}; SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata); std::cout &lt;&lt; appdata &lt;&lt; '\n'; }
  • 好的,现在当我尝试编译它时,它告诉我“SHGetFolderPath 未在此范围内声明。”编辑:没关系,我设法修复它,它有效。谢谢!
  • #include
【解决方案2】:

存在(并且一直存在)一种使用 API 获取此内容的方法:

CoInitialize(0);
wchar_t AppDataFolder[MAX_PATH];
SHGetFolderPath(0, CSIDL_APPDATA, 0, SHGFP_TYPE_CURRENT, AppDataFolder);

但是对于 APPDATA 这样做的理由很少,因为环境变量是可用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2010-09-06
    • 2011-10-22
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多