如何在unix和windows中获取系统或用户临时文件夹?

per*_*ser 27 c++

我正在写一个C++问题.它需要在Windows和Unix OS上运行.

如何在不同的操作系统上获取用户或系统tmp文件夹?

Pre*_*eti 41

更新:感谢@RoiDanton,最新答案是std::filesystem::temp_directory_path(C++ 17)


尝试boost::filesystemtemp_directory_path()内部使用:

  • ISO/IEC 9945(POSIX) :通过在列表中找到的第一个环境变量提供的路径TMPDIR,TMP,TEMP,TEMPDIR.如果找不到这些,"/tmp".

  • Windows:Windows GetTempPathAPI函数报告的路径.

有趣的是,窗口的GetTempPath使用类似的逻辑的POSIX版本:在列表中的第一个环境变量TMP,TEMP,USERPROFILE.如果找不到这些,则返回Windows目录.

这些方法主要依赖于环境变量的事实看起来有点糟糕.但那就好像是如何确定的.看到它真的是多么平凡,你可以轻松地使用自己cstdlibgetenv功能,特别是如果你想要特定的订单优先级/要求或者不想使用其他库.

  • 这是最好的多平台答案,应该接受。 (2认同)
  • 此外,对于C ++ 14 / C ++ 17,它是C ++标准的一部分:http://en.cppreference.com/w/cpp/filesystem/temp_directory_path (2认同)

Jon*_*ler 7

$TMPDIR根据POSIX,使用环境变量.

char const *folder = getenv("TMPDIR");
if (folder == 0)
    folder = "/tmp";
Run Code Online (Sandbox Code Playgroud)