如何从 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");
}
最后,您只需删除旧文件并使用旧文件的名称重命名新文件。我希望这能解决你的问题。
我想删除我的文本文件中的一行而不用“ ”替换它。 正如旁注:我的文件有换行符。所以我有不止一行(比如 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");
}
最后,您只需删除旧文件并使用旧文件的名称重命名新文件。我希望这能解决你的问题。