QTextStream で QFile を読んでいます。
QFile file("example.txt");
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull()) {
if(line.contains("DELETE"))
{
// delete line
}
line = in.readLine();
}
行を削除する方法はありますか?
行を削除するということは、残りのすべてを後方にシフトすることを意味します。
最も簡単な方法は、最初の削除後に行を新しい場所に書き戻すことです。
一時ファイルを使用し、成功した場合は元の名前に変更するのが最も安全な方法です。
しかし、読むよりも多く書くことは決してないので、同じファイルで作業しても問題ないと思われます。
読み取り位置と書き込み位置を維持する必要があります。
次のようになります: (元のコードに基づく)
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);
私の知る限り、それはそれほど単純ではありません。私が考えることができる最善の解決策は、ファイル全体を 1 行ずつ読み取り、すべての行を QVector にプッシュし、必要に応じてコンテナーの要素を変更してから、ファイルにプッシュすることです。