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

2021-10-17 02:10:17 字數 2324 閱讀 2546

文字檔案讀寫

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

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

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

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

std::cerr << "cannot open file for writing: "

<< qprintable(file.errorstring()) << std::endl;

return;

qtextstreamout(&file);

out << "thomas m. disch: " << 334 << endl;

是我們寫入的**。我們分別寫入兩個單詞,然後試圖以與二進位制檔案讀出的格式相同的形式讀出: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)設定生成的最大的小數字數,預設是6setfieldwidth(int)設定乙個欄位的最小值,預設是0setfieldalignment(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寫文字檔案換行符 Qt向文字檔案輸出換行

使用qtextstream向txt檔案輸出換行時,需要使用qiodevice text標誌。官方文件對qiodevice text的解釋 when reading,the end of line terminators are translated to n when writing,the end...

Qt寫文字檔案

qtexststream用於讀寫純文字以及html,xml等文字格式的檔案,此類考慮了unicode編碼與系統本地編碼的或其它任意編碼之間的轉換問題,別且明確地處理了因使用不同的作業系統而導致的行尾符之間的轉換 windows系統的行尾符是 r n unix和mac os x系統是 n qtexst...

寫文字檔案

textoper 文字檔案操作類 public class textoper 新建乙個檔案 public bool createfile string strpath,string strname else file.create strpath strname return true catch ...