C - 如何获取用户文件夹?

新手上路,请多包涵

我的程序有点问题…

我必须使用应用程序数据创建一个文件,但我不知道如何访问 %USER%%APPDATA% 目录…

我尝试使用应用程序文件夹,但如果我将应用程序安装在 D:\Program Files\(Organization)\(APPName) 我无法在此目录中写入新文件,如果我没有管理员权限,我只能读取或修改…

所以,问题是:如何访问 %USER% 文件夹或使用应用程序获取 ADMIN 权限… PS.:我在 C++ Builder 中使用 VCL

原文由 mauroaraujo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

一种经典的方法是使用 getenv 读取环境变量:

 char *user = getenv("USER");
char *appdata = getenv("APPDATA");

关于用户权限和在这些位置执行文件读/写/创建,您当然可以在应用程序运行的用户文件夹中。在其他文件夹中,您需要以目标用户或管理员身份运行它。此外,在 Program Files 或 Program Files (x86) 中安装应用程序后,系统将不允许您在那里写入。安装在“trustedinstaller”用户凭据下执行,最终用户权限在安装期间为“当前用户”或“所有用户”设置。

希望这可以帮助。

原文由 DNT 发布,翻译遵循 CC BY-SA 3.0 许可协议

假设这是一个纯 Windows 问题,您应该使用 SHGetSpecialFolderPath

  • 通过 CSIDL_PROFILE 得到 %USERPROFILE% 的等价物。
  • 通过 CSIDL_APPDATA 得到 %APPDATA% 的等价物。

请注意,基于 CSIDL 的函数的文档有点吓人,因为它们谈到了不支持或不推荐使用的函数。相反,他们敦促您使用 SHGetKnownFolderPath 。如果您的程序永远不需要在 XP 上运行,那很好。如果是这种情况,请继续使用 SHGetKnownFolderPath 。否则,使用基于 CSIDL 的选项。

原文由 David Heffernan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题