我想删除文本文件的一行而不用“”替换。 恰如其分:我的文件有换行符。所以我不止一行(像一张桌子)
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,但不能解决我的问题:
答案 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个字符以修改该位置的文件,因此文件的最终内容为:
这是一个示例