【问题标题】:C++: How can I optimize copying the rest of a .txt file?C++:如何优化复制 .txt 文件的其余部分?
【发布时间】:2019-02-24 23:10:05
【问题描述】:

我有大型文本文件,需要在文件中嵌入代码(时间)。我通过迭代 ifstream 到需要插入代码的点来做到这一点,然后继续迭代文件的其余部分,不断将数据复制到一个新的 ofstream 文件。

这些文件很大,几乎所有这种简单的复制和粘贴操作都发生在代码插入之后。这需要一段时间来执行。 我想知道是否有办法优化批量复制文件的其余部分(而不是文件其余部分的逐字迭代)。这是相关的代码段:

while (!in.eof())
{
    in >> value;
    if ((counter > 392) && (counter < 399) && (timePosition < 6))
    {
        rounded = floorf(value * 1000) / 1000;
        value = rounded + (time[timePosition] * .00001);
        timePosition++;
    }
    out << value << " ";
    counter++;
}

【问题讨论】:

标签: c++ optimization text ifstream ofstream


【解决方案1】:

Pete Becker 的上述回答正是我们所需要的。

out << in.rdbuf();

使用此缓冲区指针命令,过去一分钟内执行的操作现在需要几秒钟。新代码:

while (counter < 399)
{
  in >> value;
  if ((counter > 392) && (counter < 399) && (timePosition < 6))
  {
    rounded = floorf(value * 1000) / 1000;
    value = rounded + (time[timePosition] * .00001);
    timePosition++;
  }
  out << value << " ";
  counter++;
}
out << in.rdbuf();

感谢所有评论的人;你提供了很多信息,我现在知道的比我问这个问题时知道的要多!

【讨论】:

  • 这似乎不会复制整个文件,只是其中的一小部分。
  • @Mark Ransom 从我到目前为止的测试来看,它似乎奏效了;它在代码插入循环之后非常快速地传输文件的其余部分(最后的 [out
  • 我一直在阅读rdbuf,它似乎能够流式传输文件的全部内容,但需要专门处理operator&lt;&lt; 才能正确处理它。显然它有,这是一个很好的惊喜。
  • 作为一项改进,考虑一次将前 399+ 个字节读入缓冲区,根据需要替换部分,然后立即写入。应该更快。
  • @Deduplicator 就是这样;我只是不确定如何通过代码表达额外的效率。如何将这些字节带入缓冲区,并访问特定字节进行修改? (原谅我的无知)
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多