2012-11-09 13 views
5

szukam nadpisanie danych w pliku tekstowym, ale wszystko, co mogę zrobić, to wydaje się, dołącz do niejZastąp plik tekstowy vs append

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

Odpowiedz

18

Zmień

mFile.open(QFile::ReadWrite); 

do

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

QIODevice vs QFile rozróżnienie nie jest konieczne, ale ja osobiście faworyzują przy użyciu klasy bazowej. Flaga Truncate nadpisze (czyli usunie) istniejący plik. Nie pytałeś o to, ale powinieneś dodać flagę QIODevice::Text, aby upewnić się, że znaki nowego wiersza zostaną przetłumaczone na/z lokalnego kodowania (zwykły \n vs. \r\n).

Można również wykonać polecenie other suggestion i otworzyć plik tekstowy bezpośrednio za pomocą jednego z konstruktorów QTextStream. Obowiązują te same konwencje QIODevice::OpenMode.

7

użyć przeciążony konstruktora QTextStream:

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

The QIODevice::Truncate usunie całą poprzednią zawartość pliku, a QIODevice::ReadWrite otworzy go do odczytu i zapisu.