我有一个名为copynumbers.txt的文本文件,在使用示例时,我需要删除一个数字后的一些数字,该文本文件将包含以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
每个整数应占用4个字节的空间。
我想删除或删除数字7到15,同时保留1到6,然后将数字30添加到它。
因此,文件将保留1到6并摆脱7到15,然后在那之后我要保留30。
我的新文件应如下所示
1 2 3 4 5 6 30
我的问题是如何在不覆盖数字1到6的情况下做到这一点?
因为当我使用
std::ofstream outfile;
outfile.open ("copynumbers.txt");
它将覆盖所有内容,并在文件中仅保留30
当我使用
ofstream outfile("copynumbers.txt", ios::app);
它将在15之后追加30,但不会删除任何内容。
我的一些代码:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outfile("copynumbers.txt", ios::app);
outfile.seekp(0, outfile.end);
int position = outfile.tellp();
cout << position;
//outfile.seekp(position - 35);
outfile.seekp(28);
outfile.write(" 30",4);
outfile.close();
return 0;
}
最佳答案
尝试“就地”修改文件通常是一个坏主意-如果出现任何问题,则最终会导致文件损坏或丢失。通常,您将执行以下操作:
打开原始文件进行输入
创建用于输出的临时文件
读取输入文件,处理,写入临时文件
如果成功,则:
删除原始文件
重命名临时文件为原始文件名
除了更安全的策略外,这还使修改内容的过程变得更加容易,例如要从文件中“删除”某些内容,您只需在读取输入时跳过该部分即可(即不要将其写入输出文件中)。
关于c++ - 删除文本文件C++的一部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26177738/