我正在用QTextStream讀取QFile。Qt從文件中刪除一行
QFile file("example.txt");
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull()) {
if(line.contains("DELETE"))
{
// delete line
}
line = in.readLine();
}
有沒有辦法刪除一行?
我正在用QTextStream讀取QFile。Qt從文件中刪除一行
QFile file("example.txt");
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull()) {
if(line.contains("DELETE"))
{
// delete line
}
line = in.readLine();
}
有沒有辦法刪除一行?
你可以打開你的文件,讀取內容,修改的內容,然後將它們寫回文件。這是一種方法:
QFile f("myfile.txt");
if(f.open(QIODevice::ReadWrite | QIODevice::Text))
{
QString s;
QTextStream t(&f);
while(!t.atEnd())
{
QString line = t.readLine();
if(!line.contains("DELETE"))
s.append(line + "\n");
}
f.resize(0);
t << s;
f.close();
}
據我所知,這並不簡單。我能想到的最佳解決方案是逐行讀取整個文件,將每行都推送到QVector中,然後根據需要修改容器的元素,然後將其推回到文件中。
對於這樣的事情,最好使用像QList或QLinkedList這樣的容器。 –
有QStringList –
刪除一條線意味着所有其餘的向後移動。
最簡單的方法是在第一次刪除後在新位置回寫行。
使用臨時文件,如果成功,將其重命名爲原始文件是最安全的方法。
但是你永遠不會寫更多的然後你讀,所以它假設可以在同一個文件上工作。
你需要保持閱讀pos和寫pos。
它應該是這樣的:(基於原碼)
QFile file("example.txt");
QTextStream in(&file,QIODevice::ReadWrite);
QString line = in.readLine();
qint64 rpos,wpos=0;
bool shift = false;
while (!line.isNull()) {
rpos = in.pos();
if(!line.contains("DELETE"))
{
if(shift){
in.seek(wpos);
in<<line<<endl;
wpos = in.pos();
in.seek(rpos);
} else{
wpos = rpos;
}
}else{
shift = true;
}
in.seek(rpos);
line = in.readLine();
}
file.resize(wpos);
最簡單的方法是創建一個新文件並在其中寫入必要的字符串。 –
截斷?什麼文件內容? – CapelliC