所以我们说文本文件包含以下内容:
kasjdfhjkasdhfjkasdhfjasfjs
asdjkfhasj
的开始
sdfjkhasdkjfhasjkdfhajksdfhjkasdfh
asdjfhajs
的端
sdjfhsjkdf
如何在单词" start"之前删除所有内容。 "结束"?
之后的所有事情答案 0 :(得分:1)
文件系统通常支持"截断"意思是切断结束,但他们不支持删除文件的正面。因此,您只剩下一个选项:您需要在" start"之间移动内容。和"结束"到文件的开头,然后"截断"其余的部分。如果您移动的部分非常大,这并不是非常有效,但在典型的文件系统上却没有办法解决这个问题。
答案 1 :(得分:0)
除非是非常具体的情况,否则编辑文件并不是一个好主意。例如,如果您的计算机在错误的时间点崩溃,您将导致文件损坏,并且无法在尝试转换之前恢复其状态。
因此,最好从一个文件中读取并写入另一个文件,这非常简单:
std::ifstream in ("input.txt");
std::ofstream out("output.txt");
std::string line;
// read and discard lines before "start"
while(std::getline(in, line) && line != "start");
// read and echo lines until "end"
while(std::getline(in, line) && line != "end") {
out << line << '\n';
}
然后将其移动到原始文件所在的位置,覆盖它。在Windows上:
MoveFileExA("output.txt", "input.txt", MOVEFILE_REPLACE_EXISTING);
符合POSIX的系统(例如Linux,BSD,MacOS X):
rename("output.txt", "input.txt");
...或者查看Boost.Filesystem以获取便携式解决方案。
重命名通常是文件系统的原子操作,因此您在转换之前或之后始终处于状态,如果粪便撞击风扇,您将能够修复它没有太多麻烦。