2016-11-08 90 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