2012-11-09 130 views
5

我期待在一個文本文件來覆蓋數據,但所有我似乎可以做的就是追加到它覆蓋文本文件VS追加

mFile.open(QFile::ReadWrite) 

QTextStream in(&mFile); 
QString first = in.readLine(); //discard the headers 
QString dataLine = in.readLine(); //headers 
QStringList sql_row = dataLine.split("\t"); //first row (sake of proj only 1 row) 

if(sql_row[1].isEmpty()) //no user name registered 
{ 
    QByteArray user= getenv("USERNAME"); //for windows 
    if(user.isEmpty()) 
     { 
       user = getenv("USER"); ///for MAc or Linux 
      } 
    dataLine = dataLine.insert(dataLine.indexOf("\t")+ 1,user); 

    in << first << endl << dataLine << endl; 
    mFile.flush(); 
    mFile.close(); 

回答

18

變化

mFile.open(QFile::ReadWrite); 

mFile.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text); 

QIODevice應用VS QFile時的區別是沒有必要的,但我使用基類親自青睞。截斷標誌將覆蓋(即刪除)現有文件。您沒有問過這個問題,但您應該添加QIODevice::Text標誌以確保換行符可以翻譯成本地編碼(原始\n\r\n)。

或者,您可以按照other suggestion並使用QTextStream的構造函數之一直接打開文本文件。相同的QIODevice::OpenMode慣例適用。

7

使用QTextStream的重載的構造函數:

QTextStream in(&mFile, QIODevice::ReadWrite | QIODevice::Truncate); 

QIODevice::Truncate將刪除該文件的所有以前的內容,並QIODevice::ReadWrite將打開它的讀取和寫入訪問。