视觉C++删除文本文件中位于特定单词之前/之后的所有内容
visual C++ delete everything in text file that is located before/after a specific word
所以假设文本文件具有以下内容:
kasjdfhjkasdhfjkasdhfjasfjs
Asdjkfhasj
开始
sdfjkhasdkjfhasjkdfhajksdfhjkasdfh
Asdjfhajs
结束
sdjfhsjkdf
如何删除"开始"一词之前的所有内容和"结束"之后的所有内容?
文件系统通常支持"截断"的意思是切断结尾,但它们不支持删除文件的前面。 所以你只剩下一个选择:你需要将"开始"和"结束"之间的内容移动到文件的开头,然后"截断"其余部分。 如果您要移动的部分非常大,这不是很有效,但在典型的文件系统上没有办法绕过它。
除非非常特殊的情况,否则就地编辑文件不是一个好主意。例如,如果您的计算机在错误的时间点崩溃,您最终会得到一个损坏的文件,并且无法在尝试转换之前恢复其状态。
因此,最好从一个文件读取并写入另一个文件,这非常简单:
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';
}
然后将其移动到原始文件所在的位置,覆盖它。在视窗上:
MoveFileExA("output.txt", "input.txt", MOVEFILE_REPLACE_EXISTING);
在符合POSIX标准的系统(如Linux,BSD,MacOS X)上:
rename("output.txt", "input.txt");
。或者查看 Boost.Filesystem 获取便携式解决方案。
重命名通常是文件系统的原子操作,因此您将始终具有转换之前或之后的状态,如果粪便物质击中风扇,您将能够轻松修复它。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- 在类定义之后定义一个私有方法
- 在循环C++中指定字符串之后,不会打印该字符串
- C++宏忽略之后的内容
- 如何根据单词在文本中出现的概率输出单词
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 如何用for循环在c++中生成单词三角形
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 循环无限运行C++解决骑士之旅问题
- C++-字符串是否包含一个带有简单循环的单词
- strncpy之后的char数组的错误行为
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- 视觉C++删除文本文件中位于特定单词之前/之后的所有内容
- 在一行最后一个单词之后立即退出While循环