应优先读取 tmpdir 环境变量(linux/macos)或调用 gettemppath(windows),fallback 至 /tmp 或系统默认;避免硬编码或使用废弃函数;std::filesystem::temp_directory_path 虽跨平台但需验证可写性。

Linux/macOS 下直接读取 TMPDIR 环境变量就足够了
多数 Unix-like 系统(包括 macOS)会设置TMPDIR,且优先级高于/tmp。不读它,反而硬编码/tmp,会导致程序在容器或沙盒环境(如 Xcode、Flatpak)里写入失败。
- 用
std::getenv("TMPDIR")获取,返回nullptr时再 fallback 到"/tmp" - 别用
tempnam()或mktemp()——它们不尊重TMPDIR,且tempnam()已被 C ++23 标为废弃 - 注意
std::getenv返回的是 C 字符串,需转为std::string或std::filesystem::path再拼接文件名
Windows 必须调用 GetTempPath,不能只看TEMP 或TMP
GetTempPath不是简单查环境变量:它会依次检查 GetEnvironmentVariable("TMP")、"TEMP",再 fallback 到用户临时目录(如C:UsersAliceAppDataLocalTemp),最后才是GetWindowsDirectory+"Temp"。只读TEMP 漏掉前两层逻辑,尤其在企业域环境下容易出错。
- 调用
GetTempPathA或GetTempPathW,传入缓冲区大小(至少MAX_PATH) - 返回值是实际写入长度(含结尾