如何用用户运行替换特定的Windows用户名路径

时间:2016-07-01 00:17:22

标签: c++

所以我想要做的就是让路径中的用户名成为运行它的用户。

因此,例如,如果我运行此程序的Windows用户名为Bob,那么我想在Bob的桌面上创建该文件。而不是代码中设置的那个。

我尽可能地解释它,谢谢。

#include <fstream>
#include <ostream>

using namespace std;

int main()
{
  std::ofstream fs("C:\\Users/SAMPLE_USERNAME/Desktop/omg it works.txt"); //makes the text file
  fs<<"Testing this thing!"; //writes to the text file
  fs.close();
  return 0;
}

如果有帮助的话,我正在使用Code :: Blocks。

1 个答案:

答案 0 :(得分:0)

既然你已经提到了Windows用户,我就是在假设你 想要一个Windows的解决方案。获取用户名可以完成 使用Win32函数SHGetKnownFolderPath。但请注意 如果您希望您的应用程序支持Windows XP,那么您将 必须使用较旧的(已弃用)函数SHGetFolderPath。您 可以使用这个样本:

wchar_t *pszDesktopFolderPath;
if(S_OK == SHGetKnownFolderPath(FOLDERID_Desktop, KF_FLAG_DEFAULT, NULL, pszDesktopFolderPath))
{
    // pszDesktopFolderPath now points to the path to desktop folder
    ...

    // After you are done with it, delete the buffer for the path like this
    CoTaskMemFree(pszDesktopFolderPath);
}

以下是使用SHGetFolderPath的示例:

LPTSTR pszDesktopFolderPath[MAX_PATH];
if(S_OK == SHGetFolderPathA(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, pszDesktopFolderPath))
{
    // pszDesktopFolderPath now points to the path to desktop folder, no need to manually release memory

}

请注意,第三个参数表示用户的标记 试图获取桌面位置。在您启动应用程序的情况下 将标准用户帐户的权限提升为管理员帐户, 上面提到的函数返回的路径是桌面路径 管理员用户。如果您想获得标准用户的路径,那么 必须获取该用户的令牌并将其作为第三个参数传递。