QT學習 之 文本文件讀寫


上一章我們介紹了有關二進制文件的讀寫。二進制文件比較小巧,卻不是人可讀的格式。而文本文件是一種人可讀的文件。為了操作這種文件,我們需要使用QTextStream類。QTextStream和QDataStream的使用類似,只不過它是操作純文本文件的。另外,像 XML、HTML 這種,雖然也是文本文件,可以由QTextStream生成,但 Qt 提供了更方便的 XML 操作類,這里就不包括這部分內容了。

QTextStream會自動將 Unicode 編碼同操作系統的編碼進行轉換,這一操作對開發人員是透明的。它也會將換行符進行轉換,同樣不需要自己處理。QTextStream使用 16 位的QChar作為基礎的數據存儲單位,同樣,它也支持 C++ 標准類型,如 int 等。實際上,這是將這種標准類型與字符串進行了相互轉換。

QTextStream同QDataStream的使用基本一致,例如下面的代碼將把“The answer is 42”寫入到 file.txt 文件中:

QFile data("file.txt"); if (data.open(QFile::WriteOnly | QIODevice::Truncate)) { QTextStream out(&data); out << "The answer is " << 42; }
  • 1
  • 2
  • 3
  • 4
  • 5

這里,我們在open()函數中增加了QIODevice::Truncate打開方式。我們可以從下表中看到這些打開方式的區別:

枚舉值 描述
QIODevice::NotOpen 未打開
QIODevice::ReadOnly 以只讀方式打開
QIODevice::WriteOnly 以只寫方式打開
QIODevice::ReadWrite 以讀寫方式打開
QIODevice::Append 以追加的方式打開,新增加的內容將被追加到文件末尾
QIODevice::Truncate 以重寫的方式打開,在寫入新的數
QIODevice::Text 在讀取時,將行結束符轉換成 \n;在寫入時,將行結束符轉換成本地格式,例如 Win32 平台上是 \r\n
QIODevice::Unbuffered 忽略緩存

我們在這里使用了QFile::WriteOnly | QIODevice::Truncate,也就是以只寫並且覆蓋已有內容的形式操作文件。注意,QIODevice::Truncate會直接將文件內容清空。

雖然QTextStream的寫入內容與QDataStream一致,但是讀取時卻會有些困難:

http://blog.csdn.net/u013007900/article/details/46459735


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM