如何覆盖文件内容并截断未使用C ++覆盖的文件部分?具体来说,我使用临时文件来保存原始数据的编辑副本,并希望用新数据覆盖原始文件,并截断原始文件的其余部分。
有问题的代码:https://github.com/Sparen/DanmakufuObfuscator/blob/master/dnhobf_fxn.cc
(RemoveSingleLineComments(FILE* infile)
)
为了澄清,这就是我想要做的: 假设原来是ABCDEFGHIJK。我想删除B,D,H和J,从而产生ACEFGIK。我复制了这个,最后是ACEFGIKHIJK。我想删除最后一个HIJK
答案 0 :(得分:1)
请勿在您阅读时写入同一文件。代替:
file.txt
进行阅读。file.txt.new
进行撰写。file.txt
读取一行,执行地图/过滤操作,并将结果写入file.txt
。EOF
。file.txt.new
重命名为file.txt
。如果你的程序崩溃或者你失去了权力,那么在现场工作的好处就是你不会得到垃圾。通常,我仅打开文件:
答案 1 :(得分:0)
将原始文件作为fstream打开。一旦临时文件具有所需的一切,就关闭原始文件。使用out和trunc模式重新打开原始文件,然后回写它。
这允许您基本上将临时文件的内容粘贴到具有相同文件名和扩展名的空白平板上。