在 Windows 10 中,这可能很棘手,因为临时路径的值不仅取决于它的默认设置,还取决于您使用的应用程序类型。所以这取决于你具体需要什么。
[公共区域]用户本地应用数据中的TEMP
#include <Windows.h>
#include <Shlobj.h>
#include <Shlobj_core.h>
#include <string_view>
// ...
static void GetUserLocalTempPath(std::wstring& input_parameter) {
static constexpr std::wstring_view temp_label = L"\\Temp\\";
HWND folder_handle = { 0 };
WCHAR temp_path[MAX_PATH];
auto get_folder = SHGetFolderPath(
folder_handle, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_DEFAULT, temp_path
);
if (get_folder == S_OK) {
input_parameter = static_cast<const wchar_t*>(temp_path);
input_parameter.append(temp_label);
CloseHandle(folder_handle);
}
}
GetUserLocalTempPath 可能会返回全名而不是短名。
此外,如果无论运行什么,它都以 SYSTEM 而不是登录用户的身份运行,而不是返回 %USERPROFILE%\AppData\Local\Temp,它将返回更像 C:\Windows\System32\config\systemprofile\AppData\Local\Temp
任何 TEMP 环境变量的温度
#include <Windows.h>
// ...
static void GetEnvTempPath(std::wstring& input_parameter) {
wchar_t * env_var_buffer = nullptr;
std::size_t size = 0;
if ( _wdupenv_s(&env_var_buffer, &size, L"TEMP") == 0 &&
env_var_buffer != nullptr) {
input_parameter = static_cast<const wchar_t*>(env_var_buffer);
}
}
[Robust] Temp 适用于您的应用程序可访问的任何内容 (C++17)
#include <filesystem>
// ...
auto temp_path = std::filesystem::temp_directory_path().wstring();
temp_directory_path 可能会返回短名称而不是全名。
根据您的需要,您可能会充分利用 first 和 last 函数。如果您正在处理 AppContainer 应用程序,请使用<filesystem> 提供的最后一个。它应该返回类似的东西,
C:\Users\user name\AppData\Local\Packages\{APP's GUID}\AC\Temp