【问题标题】:How can I find current username and system disk? [duplicate]如何找到当前的用户名和系统盘? [复制]
【发布时间】:2021-09-24 12:43:55
【问题描述】:

我正在尝试创建一个简单的控制台应用程序,它只清理 %temp% 文件。 那么,如何在临时文件目录中找到用户名和系统盘输入呢?

这是一个字符串变量,我打算存放%temp%目录:

string tempDir = sysDisk << ":/Users/" << userName << "AppData/Local/Temp/"

【问题讨论】:

  • 试试%username%
  • 只需读取相应的环境变量 (std::getenv)。
  • 您可以使用%LocalAppData% 获取当前用户的appdata/local 文件夹。
  • 可以使用std::filesystem::temp_directory_path()获取临时目录

标签: c++


【解决方案1】:

你做错了。您根本不需要检索系统磁盘或用户名。特别是由于%temp% 文件夹的位置是用户定义的,因此无法保证它甚至位于您尝试创建的路径中。而且 Windows 的 USERSTEMP 文件夹的位置随着时间的推移发生了变化,因此将来可能会再次发生变化。

正确的解决方案是询问操作系统用户的实际%temp% 文件夹当前的确切位置。

例如,通过使用:

#include <cstdlib>
std::string tempDir = std::getenv("TEMP");
#include <filesystem>
std::string tempDir = std::filesystem::temp_directory_path().string();

或者,使用 Win32 API 函数:

#include <windows.h>
char path[MAX_PATH] = {};
DWORD len = GetTempPath(path, MAX_PATH);
std::string tempDir(path, len);
#include <windows.h>
char path[MAX_PATH] = {};
DWORD len = GetEnvironmentVariable("TEMP", path, MAX_PATH);
std::string tempDir(path, len);
#include <windows.h>
char path[MAX_PATH] = {};
DWORD len = ExpandEnvironmentStrings("%TEMP%", path, MAX_PATH);
std::string tempDir(path, len-1);
// This would be useful when dealing with individual filenames, eg:
// ExpandEnvironmentStrings("%TEMP%\filename.ext", path, MAX_PATH);

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2010-11-02
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多