【问题标题】:Delete last line from text file using fstream使用 fstream 从文本文件中删除最后一行
【发布时间】:2015-09-08 17:09:21
【问题描述】:

我想从我的data.txt 文件中存储的一些文本中删除最后一行(“%12345”)

谁能告诉我如何才能实现我想要的。抱歉,我还没有任何代码。如果你给我一些例子,我真的很感激。


data.txt

Lorem Ipsum 只是印刷和排版行业的虚拟文本。 自 1500 年代以来,Lorem Ipsum 一直是业界标准的虚拟文本, 当一个不知名的prindfdtersd拿了一个类型的厨房并加扰它来制作一个类型样本 书。它不仅经历了五个世纪,而且经历了电子领域的飞跃 排版,基本保持不变。它在 1960 年代随着 发布包含 Lorem Ipsum 段落的 Letraset 表格,最近还发布了桌面 发布软件,如 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;
}

【问题讨论】:

  • 你有没有尝试过?如果有,请发布该代码并说明您遇到问题的地方。
  • 你必须向我们展示你做了什么。有多种方法可以做到这一点,有些天真(仅适用于最后一行),有些优雅(删除文件的最后 n 行)。
  • 我添加了问题的代码,请朋友们帮帮我!!!

标签: c++ text fstream


【解决方案1】:

如果您希望代码 100% 可移植,您所能做的就是阅读所有文本,然后逐行复制,省去最后一行。如果真实文件和问题中的示例一样小,你也可以这样做。

如果文件很大并且您不关心绝对的可移植性,您可以很容易地从结尾处寻找大约 4 KB 的点,然后从那里开始读取。当您确定最后一行的开始位置时,使用特定于平台的方法将文件截断到该点(Windows 上的 SetEndOfFile,寻找正确的点并在 UNIX 上执行零长度写入等)

就您所拥有的代码而言,至少如果您尝试使用相当现代的 C++ 编译器执行此操作,您可能需要丢弃该代码并重新开始。我知道这听起来很苛刻,我真的很抱歉,但在这种情况下,这是真的。让我们从标题开始——&lt;iostream.h&gt;&lt;fstream.h&gt; 自 1990 年代中期左右,几十年前就已经过时了。大多数现代编译器仅以此为基础就直接拒绝代码。

从那里,您读取数据的代码几乎在所有方面都存在致命缺陷。您正在使用的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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2021-11-22
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多