【问题标题】:Create temporary file in C++在 C++ 中创建临时文件
【发布时间】:2014-09-25 20:30:00
【问题描述】:

我需要创建一个临时文件,用一些数据填充它并将结果发送到只接受std::istreams 的函数。

我尝试使用tmpfile(),它适用于我的第一个要求 - '创建一个文件并用一些数据填充它',但它返回一个 FILE* 并且无法转换它(据我所知) 到std::streams。

是否有创建临时文件的 C++ 方法? 如果这不可能,tmpnam 返回有效文件名的可靠性如何?有人在 Android 或 iOS 上测试过吗?

编辑:我不想将数据复制到std::stringstream,因为我的测试的一部分是从磁盘读取数据。

【问题讨论】:

  • "将结果发送到只接受 std::istreams 的函数。" 不是文件,而是:你知道 istringstream 吗?
  • 我不想复制数据。我的一部分测试是从磁盘读取...
  • 您认为tmpnam 不会做您想做的事有什么特别的原因吗?
  • @MatsPetersson 不。我更喜欢创建临时文件的唯一原因是避免在完成测试后添加删除它的代码

标签: android c++ ios


【解决方案1】:

如果您想要替代std::tmpfile 或std::tmpnam,您可能需要查看Boost Filesystem 库。它包含一个函数unique_path(),它会给你一个放置目录、文件等的地方。

它还包括标准库不具备的其他文件系统操作功能,例如遍历目录中的文件。我发现这些对单元测试特别有用。

【讨论】:

  • 应该注意,不鼓励使用 boost::filesystem::unique_path() ,因为使用原始 C 库调用也是如此:它会带来安全风险。这在stackoverflow.com/questions/43316527/… 中得到了解决——最终处理这些问题的方法是使用生成文件名并以原子方式打开它的调用,返回一个打开的文件指针。
猜你喜欢
  • 2010-11-04
  • 2012-03-31
  • 1970-01-01
  • 2012-06-14
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多