QT下檔案的讀寫

2021-06-26 22:45:47 字數 2865 閱讀 3587

1、不能在沒有對應目錄的情況下新建檔案,qfile只會新建檔案,qdir才會新建資料夾

例:在沒有新建目錄newdir的情況下,直接新建檔案newfile(qfile file("newdir/newfile"))結果失敗

2、如果對應目錄存在,newfile不存在,使用以下2行**,檔案newfile依然不會生成

qfile file("newfile");  

file.open(qiodevice::readwrite);

qt下如果要建立這個新檔案,還需要呼叫close(),這個時候newfile才會被建立

完整的**為

qfile file("newfile");  

file.open(qiodevice::readwrite);

file.close();

3、如果想通過改變當前路徑的方法,在指定目錄下新建檔案

system("cd /home/dingxy/new ");//或者qdir::setcurrent("/home/dingxy/new ");

qfile file("newdir/newfile");

在/home/dingxy/new目錄下不一定存在newfile檔案,因為以上2個函式不一定執行成功,需要檢視system()函式和setcurrent()函式執行的結果,確認返回值正確後,新建檔案操作才會成功

二進位制檔案的讀寫,適合各種資料型別的讀寫,寫入和讀出的順序需相同,當寫入資料種包含qstring型資料時,在使用seek()進行調轉時要尤其注意,qstring型資料的長度不是固定的4個位元組,而是實際長度

char head;

int hsize = sizeof(head);

qfile file("name");

file.open(qiodevice::readwrite);

寫入:

file.write((char *)&head, hsize);
讀出:

file.seek(0);

file.read((char *)&head,hsize);

qfile file;

file.setfilename("site");

file.open(qiodevice::readwrite);

qdatastream stream(&file);

寫入:

qint8 a = 10;

qint8 b;

stream << a;

讀出:

stream->seek(0);

stream >> b;

file.close();

//b = 10;

適合所有資料型別寫入,但若乙個檔案內寫入多條資料,但若寫入qstring型資料,在使用seek()進行跳轉時,一定要非常注意,由於qstring的隨實際寫入的資料長度變化,qstring所佔的空間不一定是4個位元組,需要注意資料長度問題。

可以通過每次跳轉固定長度的方式解決

若認定為name的長度不超過8個位元組

qstring name = "aaabbb";

qstring names;

如果想在第17個位元組處寫入name;

stream << (qint64)0 <<(qint64)0 <<(qint64)0;

stream.device()->seek(16);

stream << name;

stream.device()->seek(16);

stream >> names;//names = "aaabbb";

txt文字檔案的讀寫,適合qstring,qintx等資料型別的讀寫,char型寫入時,要注意資料轉換,否則會顯示亂碼

寫入和讀出的順序需相同,當寫入資料種包含qstring型資料時,在使用seek()進行調轉時要尤其注意,qstring型資料的長度不是固定的4個位元組,而是實際長度

qfile file;

file.setfilename("site");

file.open(qiodevice::readwrite);

qtextstream stream(&file);

寫入:

char a = 10;

qstring temp;

char b;

stream << qint8(a);

讀出:

stream->seek(0);

stream.device() >> temp;

file.close();

b = temp.toint()- 48;//ascii碼轉換

//b = 10;

讀出:

qstring line = stream.readline();//讀出一行
中文字元寫入時,可用streams << qobject::trutf8("操作型別編碼") 寫入

寫入檔案的時候發現乙個問題,在arm開發板上掛載優盤進行讀寫操作後,若不執行umount,直接拔下優盤,可能導致資料丟失

解決方法:

umount /dev/sdb1

docfsck -a -v /dev/sdb1

Qt讀寫檔案

1 標頭檔案 include include include 2 寫 前工作 在ui介面拖入2個button按鈕和1個textedit,如下圖所示,並分別新增button的槽函式 3 讀檔案 1 void mywidget on readbutton clicked 215 ui textedit ...

Linux下檔案讀寫示例

1.對於fread或fwrite檢視man手冊,其中要注意返回值。2.上述兩個函式第二個引數如果是1,那麼返回值即實際傳輸長度,如果返回值是0,一般表示檔案傳完 如果返回值等於需要傳輸長度,那麼正常 如果返回值小於指定傳輸長度,那麼有可能是最後一次傳輸,因為到達檔案尾,也有可能是傳輸錯誤 如果第二個...

Qt讀寫ini檔案

ini 檔案是 initialization file 的縮寫,即初始化檔案。除了windows 現在很多其他作業系統下面的應用軟體也有.ini 檔案,用來配置應用軟體以實現不同使用者的要求。一般不用直接編輯這些 ini 檔案,應用程式的圖形介面即可操作以實現相同的功能。它可以用來存放軟體資訊,登錄...