Qt學習之路 57 文字檔案讀寫

2021-06-02 01:59:30 字數 2611 閱讀 9042

二進位制檔案比較小巧,但是不是人可讀的格式。文字檔案是一種人可讀的格式的檔案,為了操作這種檔案,我們需要使用qtextstream類。qtextstream和qdatastream的使用類似,只不過它是操作純文字檔案的。還有一些文字格式,比如xml、html,雖然可以由qtextstream生成,但qt提供了更方便的xml操作類,這裡就不包括這部分內容了。

qtextstream會自動將 unicode 編碼同作業系統的編碼進行轉換,這一操作對程式設計師是透明的。它也會將換行符進行轉換,同樣不需要你自己去處理。qtextstream使用16位的qchar作為基礎的資料儲存單位,同樣,它也支援c++標準型別,如int等。實際上,這是將這種標準型別與字串進行了相互轉換。

qtextstream同qdatastream使用基本一致,例如下面的**將把「thomas m. disch: 334/n」寫入到 tmp.txt 檔案中:

qfile file("sf-book.txt");  

if (!file.open(qiodevice::writeonly))   

qtextstream out(&file);  

out << "thomas m. disch: "

<< 334 << endl; 

out << "denmark"

<< "norway"; 

是我們寫入的**。我們分別寫入兩個單詞,然後試圖以與二進位制檔案讀出的格式相同的形式讀出:

in >> str1 >> str2; 

上面兩段**的 out 和 in 都是 qtextstream 型別的。雖然我們可以正常寫入,但讀出的時候,str1裡面將是 denmarknorway,str2 是空的。以文字形式寫入資料,是不能區分資料的截斷位置的。因為使用 qdatastream寫入的時候,實際上是要在字串前面寫如長度資訊的。因此,對於文字檔案,更多的是一種全域性性質的操作,比如使用 qtextstream::readline() 讀取一行,使用 qtextstream::readall() 讀取所有文字,之後再對獲得的qstring物件進行處理。

預設情況下,qtextstream 使用作業系統的本地編碼進行讀寫。不過你可以使用 setcodec() 函式進行設定,比如

stream.setcodec("utf-8"); 

同 類似,qtextstream 也提供了一些用於格式化輸出的描述符,稱為stream manipulators。這些描述符放置在輸出內容之前,或者是使用相應的函式,用於對後面的輸出內容做格式化。具體的描述符如下

setintegerbase(int)

0讀出時自動檢測數字字首

2二進位制

8八進位制

10十進位制

16十六進製制

setnumberflags(numberflags)

showbase

顯示字首,二進位制顯示0b,八進位制顯示0,十六進製制顯示0x

forcesign

在實數前面顯示符號

forcepoint

在數字中顯示點分隔符

uppercasebase

使用大寫的字首,如0b, 0x

uppercasedigits

使用大寫字母做十六進製制數字

setrealnumbernotation(realnumbernotation)

fixednotation

定點計數表示,如0.000123

scientificnotation

科學計數法表示,如1.23e-4

smartnotation

定點或科學計數法表示,自動選擇簡潔的一種表示法

setrealnumberprecision(int)

設定生成的最大的小數字數,預設是6

setfieldwidth(int)

設定乙個欄位的最小值,預設是0

setfieldalignment(fieldalignment)

alignleft

左對齊alignright

右對齊aligncenter

中間對齊

alignaccountingstyle

符號和數字之間對齊

setpadchar(qchar)

設定對齊時填充的字元,預設是空格

比如,下面的**

out << showbase << uppercasedigits << hex << 12345678; 

將輸出0xbc614e。或者我們可以這樣去寫:

out.setnumberflags(qtextstream::showbase | qtextstream::uppercasedigits);  

out.setintegerbase(16);  

out << 12345678; 

qtextstream 不僅僅可以輸出到 qiodevice 上,也可以輸出到 qstring 上面,例如

qstring str;  

qtextstream(&str) << oct << 31 << " "

<< dec << 25 << endl; 

本文出自 「豆子空間」 部落格,請務必保留此出處

Qt學習之路之QFile讀寫文字檔案

qfile提供了讀寫文字檔案的介面 這裡給出qfile讀寫文字檔案例項 步驟 1,建立控制台應用程式 2,開啟main.cpp,實現 如下 關閉檔案,這裡請注意,開啟檔案後,在不對檔案操作時,請關閉檔案,避免資料丟失 file.close 開啟檔案。以只寫的方式開啟檔案 以只寫的方式開啟,將會刪除原...

qt寫文字檔案換行符 Qt 文字檔案讀寫

文字檔案讀寫 二進位制檔案比較小巧,但是不是人可讀的格式。文字檔案是一種人可讀的格式的檔案,為了操作這種檔案,我們需要使用 qtextstream 類。qtextstream 和 qdatastream的使用類似,只不過它是操作純文字檔案的。還有一些文字格式,比如 xml html,雖然可以由 qt...

讀寫文字檔案

讀文字 function readtext filename string string vars string alltext string f textfile begin assignfile f,filename 將c myfile.txt檔案與f變數建立連線,後面可以使用f變數對檔案進行操...