【问题标题】:What is the proper way to work with files in C++?在 C++ 中处理文件的正确方法是什么?
【发布时间】:2011-11-29 18:35:49
【问题描述】:

我正在学习 C++,现在我正在阅读有关处理文件的内容。正如我所读到的,有很多变体。所以我想问,在 C++ 中处理文件的正确方法是什么?使用 fstream(ifstream 和 ofstream)?我读过一些意见,认为 fopen 工作得更快,所以最好使用它,但它不会是 C++。 感谢关注!

【问题讨论】:

  • fopen 也是 C++ 的一部分(通过 C 子集)。 :)
  • 请不要太在意那些说 X 比 Y 快得多的事情。大多数时候这无关紧要,但当它发生时,请做出自己的判断。最好的方法是为工作使用正确的工具。

标签: c++ file


【解决方案1】:

我同意 Juraj 对 i/ofstream 与 FILE* 的评估,我只是想谈谈内存映射文件。在 Boost.SpiritClassic 中,有一个鲜为人知的 gem,叫做 mmap_file_iterator:

http://www.boost.org/doc/libs/1_47_0/boost/spirit/home/classic/iterator/file_iterator.hpp

如果您在 Windows 或 POSIX 环境中,我相信它会对您的文件进行内存映射,并且它是 RandomAccessIterator,而不是 Input/OutputIterator。

至于什么方法是“合适的”,这完全取决于您的应用程序的要求。探索所有选项并在您能想到的尽可能多的维度上比较结果绝对是一件好事。

【讨论】:

    【解决方案2】:

    在使用 C++ 时使用 ifstreamofstream。它应该不会比FILE* 慢很多,但更安全。

    this related question

    【讨论】:

    • 为什么更安全?在什么方面更安全?
    • 比使用FILE* 更安全。例如,您永远不会忘记调用close,因为fstream 在超出范围时会自动关闭。
    • 所以它更安全只是因为它肯定会释放资源?无论如何,FILE* 的工作速度更快。
    • @Hate: 自动释放资源还不够吗?我会说这是一个巨大的好处。还有其他好处,例如阅读 std::string 而不是 char *
    猜你喜欢
    • 2013-07-24
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多