替代文件并截断未替代的零件

Override a file and truncate the non-overridden part

本文关键字:零件 文件      更新时间:2023-10-16

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

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

为了澄清,我想做的是:假设原作是ABCDEFGHIJK。我想删除B、D、H和J,从而生成ACEFGIK。我把这个复制回来,最后得到了ACEFGIKHIJK。我想删除最后一个HIJK

不要在读取时写入同一个文件。相反:

  1. 打开file.txt进行阅读
  2. 打开file.txt.new进行写入
  3. file.txt中读取一行,执行映射/筛选操作,并将结果写入file.txt
  4. 重复步骤3,直到EOF
  5. 关闭文件
  6. file.txt.new重命名为file.txt

就地工作的好处是,如果你的程序崩溃或断电,你就不会收到垃圾。通常,我打开文件:

  1. 还不存在的
  2. 处于附加模式(对于日志)

将原始文件作为fstream打开。一旦临时文件具备了所需的一切,请关闭原始文件。使用out和trunk模式重新打开原始文件,并将其写回

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