32 QT 二進位制檔案讀寫

2021-09-28 18:38:17 字數 1636 閱讀 7068

qdatastream既能夠訪問 c++ 基本型別,如 int、char、short 等,也可以訪問複雜的資料型別,例如自定義的類。實際上,qdatastream對於類的儲存,是將複雜的類分割為很多基本單元實現的。

結合qiodevice,qdatastream可以很方便地對檔案、網路套接字等進行讀寫操作。我們從**開始看起:

qfile file

("file.dat");

file.

open

(qiodevice::writeonly)

;qdatastream out

(&file)

;out <<

qstring

("the answer is");

out <<

(qint32)

42;

在這段**中,我們首先開啟乙個名為 file.dat 的檔案(注意,我們為簡單起見,並沒有檢查檔案開啟是否成功,這在正式程式中是不允許的)。然後,我們將剛剛建立的file物件的指標傳遞給乙個qdatastream例項out。類似於std::cout標準輸出流,qdatastream也過載了輸出重定向《運算子。後面的**就很簡單了:將「the answer is」和數字 42 輸出到資料流。由於我們的 out 物件建立在file之上,因此相當於將問題和答案寫入file。

需要指出一點:最好使用 qt 整型來進行讀寫,比如程式中的qint32。這保證了在任意平台和任意編譯器都能夠有相同的行為。

如果你直接執行這段**,你會得到乙個空白的 file.dat,並沒有寫入任何資料。這是因為我們的file沒有正常關閉。為效能起見,資料只有在檔案關閉時才會真正寫入。因此,我們必須在最後新增一行**:

file.

close()

;// 如果不想關閉檔案,可以使用 file.flush();

接下來我們將儲存到檔案中的答案取出來:

qfile file

("file.dat");

file.

open

(qiodevice::readonly)

;qdatastream in

(&file)

;qstring str;

qint32 a;

in >> str >> a;

唯一需要注意的是,你必須按照寫入的順序,將資料讀取出來。順序顛倒的話,程式行為是不確定的,嚴重時會直接造成程式崩潰。

那麼,既然qiodevice提供了read()、readline()之類的函式,為什麼還要有qdatastream呢?qdatastream同qiodevice有什麼區別?區別在於,qdatastream提供流的形式,效能上一般比直接呼叫原始 api 更好一些。我們通過下面一段**看看什麼是流的形式:

qfile file

("file.dat");

file.

open

(qiodevice::readwrite);

qdatastream stream

(&file)

;qstring str =

"the answer is 42"

;stream << str;

Qt 二進位制檔案讀寫

qt 使用 qfile 和 qdatastream 進行二進位制資料檔案的讀寫 qdatastream 儲存檔案時使用的資料編碼的方式不同,可以儲存為兩種檔案 儲存為stm檔案 資料流寫入資料時都使用運算子 不論寫的是 qint16 qreal 還是字串。除了可以寫入基本的資料型別外,qdatast...

二進位制檔案讀寫

define crt secure no warnings include include include size t fread void buffer,size t size,size t count,file stream size t fwrite const void buffer,si...

C 讀寫二進位制檔案

摘要 使用c 讀寫二進位制檔案,在開發中操作的比較頻繁,今天有幸找到一篇文章,遂進行了一些試驗,並進行了部分的總結。使用c 操作檔案,是研發過程中比較頻繁的,因此進行必要的總結和封裝還是十分有用的。今天在網上找到一篇,遂進行了部分的試驗,以記之,備後用。include 寫二進位制檔案 寫二進位制檔案...