获取文档目录

时间:2019-02-06 19:46:16

标签: c++ windows winapi

我正在为游戏制作一个单人作弊游戏,并计划将其公开。我已经编写了API,并且一切正常,但是我想将用户输入的数据保存到.ini文件中,因此除非凭据更改,否则他们只需登录一次。我已经做到了,它可以使用相对路径C:\Users\Name\Documents\Cheat\Authorise.ini进行工作,尽管检查结果时,似乎并没有保存或读取文件中的数据。

我想知道是否有更好的方法来获取文档目录。

功能:

std::string authFile = "C:\\Users\\%USERNAME%\\Documents\\Cheats\\Authorise.ini";
std::string username = GUI::Files::ReadStringFromIni(authFile, "Login", "Username");
std::string password = GUI::Files::ReadStringFromIni(authFile, "Login", "Password");`

2 个答案:

答案 0 :(得分:1)

由于您使用的是Windows,因此应在名为<ShlObj.h>的{​​{1}}中使用可用于此目的的Windows API调用。请注意,您最好为此使用SHGetKnownFolderPath,因为std::wstring的变体没有接受MBCS或ANSI字符串。另外,这将使您获得用户个人资料目录的完整路径,而不仅仅是用户名。

SHGetKnownFolderPath

此外,一旦完成PWSTR path; SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_DEFAULT, NULL, &path); std::wstring strpath(path); CoTaskMemFree(path); 的使用,请通过path释放它。

答案 1 :(得分:1)

不同版本的Windows将用户配置文件存储在不同的位置,甚至shutdown /r /t 300 /m \\computer $system restart-computer -computername $system -Force -Wait -For PowerShell -Timeout 300 -Delay 2 文件夹的默认名称也可能不同。实际上,用户的Documents文件夹的名称和位置可以由用户完全自定义,甚至根本不位于用户的个人资料下。因此,您不应该假设Documents文件夹始终位于Documents上。

在所有Windows版本上获取用户C:\\Users\\%USERNAME%\\Documents文件夹的正确路径的最佳方法是简单地询问Windows本身。为此,请使用SHGetFolderPath(CSIDL_MYDOCUMENTS)(Vista之前的版本)或SHGetKnownFolderPath(FOLDERID_Documents)(Vista +),例如:

Documents