2016-11-08 13 views
-2

テキストファイルにテキストがまだ存在しない場合にのみ、テキストファイルにテキストを追加します。以下の実装では、すでに存在する場合でもテキストが追加されます。存在しない新しいアイテムを追加するだけで実装を修正するにはどうすればよいですか?まだ書き込まれていない場合にのみテキストファイルにテキストを書き込む方法

これまで

私の実装:

WriteToFile::WriteToFile(QString data) 
{ 
    path += "C:/Data.txt"; 
    QFile file(path); 
    if (file.open(QFile::Append)) 
    { 
     QTextStream in (&file); 
     QString line; 
     do { 
      line = in.readAll(); 
      qDebug() << in.readLine(); 

      if (!line.contains(data)) { 
       QTextStream stream(&file); 

       data += "\r\n"; 

       stream << data << endl; 
      } 
     } while (!line.isNull()); 
    } 
} 

答えて

1

あなたがする必要があります、次のいずれか

  • ファイル全体を解析し、そこからすべてのパスを抽出したり
  • はに書かれたすべてのパスを追跡しますファイルを何度も解析するのを避けるために

そこからは単純ですQSet<QString> writtenSoFarを作成し、すべてのパスに対して、セットにそれが含まれているかどうかをチェックします。そうでない場合は書き込みをスキップし、そうでない場合は書き込みしてセットに追加します。最初のケースでは、パーズされたパスをセットに書き込むだけで、パーズ自体と同じように、単一のチェックが非常に非効率的になります。あなたが行くにつれてパスを追跡するほうがいいです。

このセットは、あなたに良い検索パフォーマンスを与えるために重要です。それはハッシュをベースにしているので、本質的に価値のないQHashです。

関連する問題