上一章我們介紹了有關二進制文件的讀寫。二進制文件比較小巧,卻不是人可讀的格式。而文本文件是一種人可讀的文件。為了操作這種文件,我們需要使用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