QTextStream

文本文件是一種人可讀的文件,可以使用QTextStream這方便的操作介面,QTextStream和QDataStream的使用方式類似,只不過它是操作純文本文件的,可以使用 << 與 >> 運算子進行資料的讀取與寫入,像XML、HTML這類格式也可由QTextStream生成,但Qt提供了更方便的XML操作類。

QTextStream::readLine()讀取一行內容,使用QTextStream::readAll()讀取所有內容,或用>>運算子讀取內容(以空白為區隔),這些方法皆會得到QString。

QIODevice有定義不同的開啟或讀取方式:

  • QIODevice::ReadOnly:以唯讀方式打開文件。
  • QIODevice::WriteOnly:以唯寫方式打開文件。
  • QIODevice::ReadWrite:打開的文件可供讀寫。
  • QIODevice::Append:以追加的方式打開,新增內容將從舊文件內容末尾開始。
  • QIODevice::Truncate:以重寫的方式打開,會將舊內容清掉後才新增內容。
  • QIODevice::Text:在讀取時,將行結束符轉換成\n;在寫入時,將行結束符轉換成本地格式,例如Win32 平台上是\r\n。

默認情況下,QTextStream的編碼格式是Unicode,可以使用setCodec(“UTF-8″),變更成UTF-8的格式。


#include <QCoreApplication>
#include <QFile>
#include <QtDebug>
#include <QTextSTream>

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    QFile file("data.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate); //沒加QIODevice::Text時,endl無法跳至下一行
    QTextStream out(&file);
    out << QObject::tr("姓名:\tMichael") << endl;
    out << QObject::tr("性別:\t男") << endl;
    out << QObject::tr("年齡:\t28") << endl;
    file.close();

    QFile file2("data.txt");
    file2.open(QIODevice::ReadOnly);
    QTextStream in(&file2);
    in.setCodec("UTF-8");
    while(!file2.atEnd()) {
        const char*tmpChar = file2.readLine();
        QString tmpString = QString::fromLocal8Bit(tmpChar); //加上fromLocal8Bit()才能顯示中文
        qDebug() << tmpString;
    }
    file2.close();
    return app.exec();
}

QTextStream