【问题标题】:What is the best way to add a header to a large file将标题添加到大文件的最佳方法是什么
【发布时间】:2011-07-28 13:50:53
【问题描述】:

如果文件大小约为 1-2GB,向现有文件添加标头(例如文件元数据)的最佳方法是什么?

在 C++ 中

【问题讨论】:

  • 我猜它与文件系统而不是语言有关。

标签: c++ file header io


【解决方案1】:

最好的方法是简单地将标头写入 new 文件,然后附加旧文件的内容。

C++ 没有在现有文件的开头提供 insert 的方法,因此这确实是最好的选择。只要确保从旧文件中读取足够大的块并将它们附加到新文件中。虽然缓冲将缓解大部分以小块执行此操作的问题,但您仍然会遇到更多函数调用的性能下降。

这可能很小,但仍然存在。对于 2G 文件,除非内存非常宝贵,否则我可能会先以半千兆块的形式进行。这允许更大的文件大小而不会浪费太多内存,并且四个读/写调用不太可能成为性能问题。

但是,与所有优化一样,要衡量,不要猜测。 C++ 标准文档没有提到(正确地)有各种可能影响性能的低级事物。由于您的问题没有提及特定的操作系统,因此我已根据此进行了回答,但是这些特定的操作系统可能(a)反应不同; (b) 提供其他可以更快的非标准调用。

【讨论】:

【解决方案2】:

唯一的方法是,在任何语言中,将标题写入新文件,将旧文件的内容复制到其中,然后重命名文件。 p>

【讨论】:

    【解决方案3】:

    取决于 (1) 文件系统及其参数(如块的大小),(2) 您必须预先添加的标头大小,(3) 写入文件的人。

    如果您自己生成文件 (1-2Gb),则只需在文件开头为标题保留字节即可。

    【讨论】:

      【解决方案4】:

      如果你真的想要超强的性能,我想你也可以通过一些低级文件系统操作来做到这一点。但我不建议走那条路。

      我也喜欢 Sege Dundich 发布的关于在最初写入文件时为标题保留空间的想法,但您可能没有该选项可用。

      【讨论】:

        猜你喜欢
        • 2014-09-10
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        相关资源
        最近更新 更多