【问题标题】:Is there a general way to detect file write errors with c++?有没有一种通用的方法来检测 C++ 的文件写入错误?
【发布时间】:2016-06-01 12:22:38
【问题描述】:

我有一个应用程序可以根据特定配置写入多个文件。有时我们使用普通的 std:ostream,有时我们使用 opencv 或 boost 编写。

对于 std:ostream rdstate() 函数。 在我看来,最好的解决方案是,如果我可以使用某种通用方法(例如来自操作系统),它适用于每种机制。 有这样的吗?

如果没有,谁能告诉我有关类似于 rdstate() 的检查的文档? 谢谢

更新:
我用这些函数编写文件:
OpenCV:cv::VideoWriter << image
提升:boost::iostreams::file_sink->write

我找到了一种方法来检查bosst 案例的书面数据。 write 函数返回写入的字节数,我可以将其与预期的字节数进行比较。 对于 openCV 案例,我使用GetFileAttributesEx 确定文件大小并检查是否增加。 这是个好方法吗?

【问题讨论】:

  • 您是否正在寻找一种适用于所有操作系统的方法?
  • 不,我只需要窗户
  • 检查错误的一般方法是调用 GetLastError()。
  • @Ian 这完全脱离了上下文。
  • 如果您可以为您拥有的所有不同类型的写入发布示例,将会很有帮助。然后,一个解决方案可能是创建一个宏来包裹它们。

标签: c++ opencv boost io filesystems


【解决方案1】:

如果写入文件的底层操作系统调用返回错误指示,我希望std::ostream 最终处于fail() 状态。

您只需要仔细检查std::ostream 的状态,包括在明确的close() 之后,因为在写出缓冲数据的最后位时可能会遇到写入错误。

【讨论】:

  • 您认为 std::ostream 在 boost 或 opencv 写入失败后也处于失败状态?
  • 我对这两个框架都不了解,所以无法回答。
  • 不幸的是,这对我没有帮助,因为据我所知,opencv 和 boost 都不使用 std::ostreams
  • 那为什么问题指的是std::ostream?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
相关资源
最近更新 更多