覆盖文件并截断​​未覆盖的部分

时间:2015-06-22 22:27:24

标签: c++ file-io

如何覆盖文件内容并截断未使用C ++覆盖的文件部分?具体来说,我使用临时文件来保存原始数据的编辑副本,并希望用新数据覆盖原始文件,并截断原始文件的其余部分。

有问题的代码:https://github.com/Sparen/DanmakufuObfuscator/blob/master/dnhobf_fxn.ccRemoveSingleLineComments(FILE* infile)

为了澄清,这就是我想要做的: 假设原来是ABCDEFGHIJK。我想删除B,D,H和J,从而产生ACEFGIK。我复制了这个,最后是ACEFGIKHIJK。我想删除最后一个HIJK

2 个答案:

答案 0 :(得分:1)

请勿在您阅读时写入同一文件。代替:

  1. 打开file.txt进行阅读。
  2. 打开file.txt.new进行撰写。
  3. file.txt读取一行,执行地图/过滤操作,并将结果写入file.txt
  4. 重复步骤3直至EOF
  5. 关闭文件。
  6. file.txt.new重命名为file.txt
  7. 如果你的程序崩溃或者你失去了权力,那么在现场工作的好处就是你不会得到垃圾。通常,我打开文件:

    1. 尚不存在
    2. 在追加模式下(对于日志)

答案 1 :(得分:0)

将原始文件作为fstream打开。一旦临时文件具有所需的一切,就关闭原始文件。使用out和trunc模式重新打开原始文件,然后回写它。

这允许您基本上将临时文件的内容粘贴到具有相同文件名和扩展名的空白平板上。