使用fstream从文本文件中删除最后一行
Delete last line from text file using fstream
我想从存储在我的data.txt
文件中的一些文本中删除最后一行("%12345")
data.txt :
Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当一个不知名的印刷厂拿了一份印刷厂的活字,并把它搅乱成一个活字标本书。它不仅存活了五个世纪,而且还经历了跨入电子时代的飞跃排版,基本保持不变。它在20世纪60年代流行起来发布了包含Lorem Ipsum段落的小册子,以及最近的桌面出版软件,如Aldus PageMaker,包括Lorem Ipsum版本。
% 12345
#include <iostream.h>
#include <fstream.h>
main()
{
char search[500];
ifstream inFile;
ofstream outFile;
inFile.open("data.txt");
while(!inFile.eof())
{
inFile.getline(search,500);
outFile.open("data.txt");
outFile.seekp(0,ios::end); //Seek to the end of text file
//I don't know what to do here to delete last line????
outFile.close();
}
inFile.close();
return 0;
}
如果您希望代码100%可移植,那么您所能做的就是读取所有文本,然后逐行复制,省略最后一行。如果实际文件和问题中的示例一样小,那么您也可以这样做。
如果文件很大,你不关心绝对的可移植性,你可以很容易地找到一个点,比如距离末尾4kb,然后从那里开始读取。当您找出最后一行开始的位置时,使用特定于平台的方法将文件截断到该点(在Windows上是SetEndOfFile,在UNIX上查找到正确的点并执行零长度写入,等等)
就你的代码而言,至少如果你试图用一个相当现代的c++编译器来做这件事,你可能需要扔掉那些代码,重新开始。我知道这听起来很残酷,我真的很抱歉,但在这种情况下,这是真的。让我们从标头开始——<iostream.h>
和<fstream.h>
自20世纪90年代中期以来就已经过时了,大约几十年前。大多数现代编译器会仅基于这一点直接拒绝该代码。
std::getline
的形式在技术上仍然包含在c++中,但是自从它被经常使用到足以引起注意以来,已经有十年了。您几乎总是希望使用带有std::string
参数的表单。你的循环条件(while(!inFile.eof())
)也完全被破坏了——它几乎不能正常工作。
至于我怎么做,我可能会按照这个一般顺序做:
read a line into `prev_line`
while (read a line into `current_line`) {
write out prev_line
prev_line = current_line
}
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 读取最后一行代码算法 - c++ 时出现问题
- 这段代码的最后一行在做什么?
- 我没有得到产量最低的产品.我该如何纠正它?最后一行是最低销售产品的输出.谢谢
- 丢失读入的每一行输入中的最后一个令牌
- 如何只阅读最后一行的开头?
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- Codelite构建仅呈现最后一行的输出
- 以下递归程序的最后一行是如何工作的
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 如何有效地读取C 中的最后一行文件
- 标准输入未读取最后一行
- 特征:将每一行除以最后一行
- cout 用于仅打印最后一行的 2D 字符串矢量
- 如何确定输入文件中的一行是否是最后一行?C++
- 多功能阵列最后一行相同的结果
- 为什么输入文件的最后一行运行两次?
- Fscanf 未从文件的最后一行 (C/C++) 读取预期值
- C++ - 将数字表从文件读取到 2D 数组中(仅存储最后一行)
- 在一行最后一个单词之后立即退出While循环