天天看點

Qt:40---文本檔案的讀寫(QFile、QTextStream)一、文本檔案二、QT純文字檔案讀寫函數三、QFile類四、QTextStream類五、示範案例

一、文本檔案

  • 文本檔案是指純文字格式存儲的檔案,例如:.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流中寫入内容
           

示範案例:

//輸入文本流
qSetFieldWidth(); //位寬
left  //左對齊
================================================
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;
}
           

五、示範案例

  • 見文章:https://blog.csdn.net/qq_41453285/article/details/100014080

繼續閱讀