一、文本文件
文本文件是指純文本格式存儲的文件,例如:.cpp、.html、.xml文件等都是純文本文件
二、QT純文本文件讀寫函數
QT提供了兩種讀寫純文本文件的方法:
①QFile類的IODevice讀寫功能直接進行讀寫
②QFile和QTextStream結合起來,用流的方法進行文件讀寫
三、QFile類
功能:提供了 一個用於讀/寫文件的接口,它可以用來讀/寫文本文件、二進制文件和 Qt 資源的 I/0 設備
QFile的其它功能,見文章:https://blog.csdn.net/qq_41453285/article/details/100019987
構造函數
QFile() QFile(const QString &name) QFile(QObject *parent) QFile(const QString &name, QObject *parent)
open函數
功能:用來打開一個文件對象
參數:決定文件以何種方式打開(同方式之間可以配合使用,中間用 | 隔開),QIODevice是Qt所有I/O設備的基礎類,為QFIle等類提供一個抽象接口
-
QIODevice::ReadOnly //以只讀的方式打開(文件不存在出錯)
-
QIODevice::WriteOnly //以只寫的方式打開,打開時文件內原內容清空(文件不存在則創建)
-
QIODevice::ReadWrite //以讀寫的方式打開文件
-
QIODevice::Append //已追加的方式打開文件,新寫入文件的數據添加到文件尾部
-
QIODevice::Truncate //以重寫的方式打開文件,文件打開時原有內容全部清空
-
QIODevice::Text //以文本的方式打開文件。讀取時,將'\n'翻譯為換行符;寫入時,將行結束符轉換成本地格式
(如Windows下是'\r\n'):
bool QFile::open(OpenMode mode)
其它用於讀寫的函數:
close(); //關閉文件 read(); //讀文件,參數為讀取的長度大小(必填) readLine(); //讀取一行 readAll(); //讀取所有 write(); //向文件中寫入數據 atEnd(); //判斷是否到達文件尾 seek(); //將文件指針定位到指定位置處 pos(); //獲取文件指針當前位置
四、QTextStream類
功能:QTextStream與IO讀寫設備結合,為數據讀寫提供了一些方便的方法的類,以流的方式讀寫文件
QTextStream可以以QFile、QTemporaryFile、QBuffer、QTcpSocket、QUdpSocket等IO設備類結合使用
構造函數
QTextStream() QTextStream(QIODevice *device) QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite) QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite) QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite) QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly)
其他函數
//將QTextStream對象設定為是否自動識別Unicode編碼(例如文本中有漢字時) void QTextStream::setAutoDetectUnicode(bool enabled) atEnd(); //判斷是否到達文件末尾 readAll(); //讀取全部內容 readLine(); //一次只讀取一行內容 <<QString //向QTextStream流中寫入內容
演示案例:
//輸入文本流 QFile file("output.txt"); if(file.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&file); //創建寫入流 out << "PI:" << qSetFieldWidth(10) << left << 3.1415926;//寫入數據 out << "\r\ninsert new line";//寫入數據 } file.close();
//輸出文件流 QFile fileOpen("output.txt"); if(! fileOpen.open(QFile::ReadOnly | QIODevice::Text)) qDebug() << fileOpen.errorString(); QTextStream in(&fileOpen); //創建輸出流 while(!in.atEnd()) { QString oneLine = in.readLine(); //讀取一行 qDebug() << oneLine; }