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

时间:2014-01-29 10:35:34

标签: c++ directory vcl

我的程序有点问题......

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

我尝试使用应用程序文件夹,但是如果我在D:\Program Files\(Organization)\(APPName)中安装应用程序,我无法在此目录中编写新文件,如果我没有管理员权限,我可以阅读或修改。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

希望这有帮助。

答案 1 :(得分:2)

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

  • 通过CSIDL_PROFILE以获得相当于%USERPROFILE%
  • 通过CSIDL_APPDATA以获得相当于%APPDATA%

请注意,基于CSIDL的函数的文档有点可怕,因为它们讨论的功能不受支持或弃用。相反,他们会敦促您使用SHGetKnownFolderPath。如果您的程序永远不需要在XP上运行,那就没问题。如果是这种情况,请继续使用SHGetKnownFolderPath。否则,请使用基于CSIDL的选项。