2012-11-09 32 views
5

tôi đang tìm để ghi đè lên dữ liệu trong một file văn bản nhưng tất cả tôi có thể dường như làm là gắn với nófile văn bản Overwrite 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(); 

Trả lời

18

Thay đổi

mFile.open(QFile::ReadWrite); 

để

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

Các QIODevice vs QFile phân biệt là không cần thiết, nhưng cá nhân tôi ủng hộ việc sử dụng lớp cơ sở. Cờ Truncate sẽ ghi đè (tức là, xóa) một tệp hiện có. Bạn không hỏi về điều này, nhưng bạn nên thêm cờ QIODevice::Text để đảm bảo rằng các ký tự dòng mới được dịch sang/từ mã hóa cục bộ (đồng bằng \n so với \r\n).

Hoặc, bạn có thể theo dõi other suggestion và mở tệp văn bản của mình trực tiếp bằng một trong các hàm tạo của QTextStream. Các quy ước tương tự QIODevice::OpenMode được áp dụng.

7

Sử dụng một constructor quá tải của QTextStream:

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

QIODevice::Truncate sẽ xóa tất cả nội dung trước đó của tệp và QIODevice::ReadWrite sẽ mở nó để truy cập đọc và ghi.

Các vấn đề liên quan