C:获取临时文件,跨平台

新手上路,请多包涵

我正在寻找一种跨平台的方式来指定一个临时文件。例如,在 linux 中将位于 /tmp 目录中,在 Windows 中类似于 C:\Users\Username\AppData\Local\Temp

是否存在针对此问题的跨平台(Boost?)解决方案?

编辑

我需要这个文件存在,直到程序终止。 tmpfile() 不保证。引用 ccpreference :

创建的临时文件会 在流关闭(fclose) 或程序正常终止时自动删除。

原文由 orlp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

Boost Filesystem 库,来自该库的版本 3,可用于创建 临时文件名。它还提供了一个清晰的解决方案。实际上,以下 C++ 代码应该是平台无关的:

 // Boost.Filesystem VERSION 3 required
#include <string>
#include <boost/filesystem.hpp>
boost::filesystem::path temp = boost::filesystem::unique_path();
const std::string tempstr    = temp.native();  // optional

文件系统路径对象 temp 可用于打开文件或创建子目录,而字符串对象 tempstr 提供与字符串相同的信息。

原文由 Robbie Morrison 发布,翻译遵循 CC BY-SA 4.0 许可协议

编辑: 特别是因为您似乎喜欢 Boost 的想法,所以 Robbie Morrison 的回答 可能对您更好。

我的原始答案仍在下方,但任何阅读此内容的人:请注意 tmpnam 不安全。此外,某些平台(例如 Windows)可能存在损坏、错误、脑死,甚至缺少实现。


tmpnam 怎么样,如果你不喜欢 tmpfile?

从链接:

以这种方式创建的文件,与使用 tmpfile 创建的文件不同,在关闭时不会自动删除;关闭后,您应该调用 remove 删除此文件。

特别是如果您需要另一个程序来知道文件的名称,这似乎更合适,因为 tmpfile 根本没有给您一个名称。

我相信它不是那么安全,如果这是一个问题。这是 描述其中一些问题的链接


另外:即使您想使用 tmpfile,您也应该考虑更安全的 tmpfile_sMS 文档 甚至将 tmpfile 称为“已弃用”,尽管我怀疑它会在未来十年内从 C++ 标准中删除)。无论如何,它们都不会保留您需要的命名文件。

原文由 jwd 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题