什么是复制文本文件的更好方法?

时间:2009-06-22 17:53:16

标签: c++ file-copying

我正在将文本从一个文件复制到另一个文件,并进行了一些更改。

我有input.txt,tmp.txt和output.txt。

想法是将几行复制到tmp.txt(直到我们到达分隔符),将文本从tmp.txt移动到output.txt,擦除tmp.txt然后继续循环直到我们到达结尾input.txt。

我在使用tmp.txt文件时遇到问题。在我第一次复制内容后,即使我关闭,删除并重新打开文件进行写入,也会停止接受新文本。我的代码变得非常混乱。

有人能建议一个巧妙的方法吗? (应对tmp.txt,从tmp.txt复制,擦除tmp.txt继续循环)

N.b。这是一个关于家庭作业问题的子任务 - 我正在从文本文件中删除c ++注释。

编辑:对于任何想知道我为什么需要tmp.txt的人:如果程序遇到*/(关闭评论)而没有打开评论那么它将需要处理它之前的所有内容,直到上一个评论为止,评论。我正在使用temp来保存可能或可能不是评论的文本。如果是 - 我将删除tmp中的文本,如果没有,我将把tmp中的文本复制到output.txt。

4 个答案:

答案 0 :(得分:2)

将input.txt作为istream打开,将output.txt作为ostream打开。从输入开始读取回显所有不属于评论的字符。遇到注释时,请勿写入输出。应该这样做。

答案 1 :(得分:1)

如果你正在使用C ++ fstream的东西,你可能必须在重新打开时调用流上的.clear()以清除错误标记(例如当你点击EOF时设置的那些)。

答案 2 :(得分:1)

我建议你跳过tmp.txt文件。应该足以打开input.txt,只需将数据随机播放到output.txt中即可。

答案 3 :(得分:0)

除非你的功课是实际删除评论的一部分,否则我会建议一些简单的脚本。 Here is a reference to a sed script

如果家庭作业涉及删除评论,您可以将输入文件作为流运行,并在评论中停止写入输出文件。

  • 您可以从检测到startend的评论开始,
    • 为C样式注释和//,C ++样式
    • 实现此功能
  • 然后,使用堆栈并向上扩展以检测嵌套注释
    • 在这里,您对使用两种评论样式进行嵌套的理解将有所帮助
  • 最后,您可以检测#if 0#endif块 - 只是为了踢: - )