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

How can I delete a line from a text file in C++?

我想删除我的文本文件中的一行而不用“ ”替换它。 正如旁注:我的文件有换行符。所以我有不止一行(比如 table)

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 但它没有解决我的问题:

如果不创建新文件,就不可能删除文件中间的一行。除非你原地更换。

所以在这种状态下,你只需要使用下面的方法:

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个字符修改该位置的文件,所以文件的最终内容为:

这是一个示例

也许您可以创建一个新文件并将您的数据放入新文件中。像这样:

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");
}

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