如何在C ++中从文本文件中删除一行?

时间:2018-11-19 19:48:25

标签: c++ filestream

我想删除文本文件的一行而不用“”替换。 恰如其分:我的文件有换行符。所以我不止一行(像一张桌子)

void Data::delete_line(const string& idNr) {
    ifstream list;
    string readFile, id;
    list.open("list.txt", ios::app);

    if (list.is_open()) {
        while (getline(list, readFile)) {
            int pos = readFile.find(';');
            id = readFile.substr(0, pos);
            if (idNr == id) {
                //deleting the line here
            }
        }
    }

}

我找到了this question,但不能解决我的问题:

2 个答案:

答案 0 :(得分:1)

也许您可以只创建一个新文件,然后将数据放入新文件中。像这样:

void Data::delete_line(const string& idNr) {
ifstream list;
ofstream outFile("newList.txt");
string readFile, id;

list.open("list.txt", ios::app);

if (list.is_open()) {
    while (getline(list, readFile)) {
        int pos = readFile.find(';');
        id = readFile.substr(0, pos);
        if (idNr != id) {
            outFile << readFile;
        }
    }
}
list.close();
outFile.close();

remove("list.txt");
rename("newList.txt", "list.txt");
}

最后,您只需删除旧文件,然后使用旧文件的名称重命名新文件。我希望这能解决您的问题。

答案 1 :(得分:0)

如果不创建新文件,则无法在文件中间删除一行。除非您将其更换到位。

所以在这种状态下,只需要使用波纹管方法即可:

std::ostream::seekp

注意此示例:

// position in output stream
#include <fstream>      // std::ofstream

int main () {

  std::ofstream outfile;
  outfile.open ("test.txt");

  outfile.write ("This is an apple",16);
  long pos = outfile.tellp();
  outfile.seekp (pos-7);
  outfile.write (" sam",4);

  outfile.close();

  return 0;
}

在此示例中,tellp用于在写入操作之后获取流中的位置。然后将指针移回7个字符以修改该位置的文件,因此文件的最终内容为:

这是一个示例