应优先读取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) - 返回值是实际写入长度(含结尾