1

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

行を削除する方法はありますか?

4

3 に答える 3

0

行を削除するということは、残りのすべてを後方にシフトすることを意味します。

最も簡単な方法は、最初の削除後に行を新しい場所に書き戻すことです。

一時ファイルを使用し、成功した場合は元の名前に変更するのが最も安全な方法です。

しかし、読むよりも多く書くことは決してないので、同じファイルで作業しても問題ないと思われます。

読み取り位置と書き込み位置を維持する必要があります。

次のようになります: (元のコードに基づく)

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);
于 2013-10-28T10:25:59.583 に答える
0

私の知る限り、それはそれほど単純ではありません。私が考えることができる最善の解決策は、ファイル全体を 1 行ずつ読み取り、すべての行を QVector にプッシュし、必要に応じてコンテナーの要素を変更してから、ファイルにプッシュすることです。

于 2013-10-28T09:46:48.007 に答える