1. 程式人生 > >Qt之讀寫檔案

Qt之讀寫檔案

1.思路

讀寫檔案的基本操作:

讀檔案寫檔案
開啟檔案開啟檔案
讀取檔案寫入檔案
關閉檔案關閉檔案

2.QFile實現讀寫檔案

QFile類提供讀寫檔案的介面。
它的建構函式如下:
QFile(const QString & name)
QFile(QObject * parent)
QFile(const QString & name, QObject * parent)
通過它的建構函式我們可以知道,可以直接在呼叫建構函式的時候直接傳遞檔名給QFile類,這是常用的方法,或者我們先生成QFile物件,然後呼叫setFileName()方法來設定檔案。
其中檔名中的路徑分隔符要求必須是’/’,其他分隔符QFile不支援。
然後再瞭解下QFile的常用函式以及開啟檔案的模式型別:
QFile的常用函式:

函式名功能
copy()複製檔案
exists()檢查檔案是否存在
open()開啟檔案
remove()刪除檔案
rename()修改檔名
setFileName()設定檔名
size()檔案大小
pos()檔案游標當前位置
seek()設定檔案游標位置
atEnd()判斷當前是否為檔案尾
read()讀取檔案內容
close()關閉檔案

檔案開啟模式

模式描述
QIODevice::NotOpen0x0000不開啟
QIODevice::ReadOnly0x0001只讀方式
QIODevice::WriteOnly0x0002只寫方式,如果檔案不存在則會自動建立檔案
QIODevice::ReadWriteReadOnly | WriteOnly讀寫方式
QIODevice::Append0x0004此模式表明所有資料寫入到檔案尾
QIODevice::Truncate0x0008開啟檔案之前,此檔案被截斷,原來檔案的所有資料會丟失
QIODevice::Text0x0010讀的時候,檔案結束標誌位會被轉為’\n’;寫的時候,檔案結束標誌位會被轉為本地編碼的結束為,例如win32的結束位’\r\n’
QIODevice::UnBuffered0x0020不快取

下面通過程式碼來看看QFile的使用:

    //example 1
    QFile file("test.csv");
    //已讀寫方式開啟檔案,
    //如果檔案不存在會自動建立檔案
if(!file.open(QIODevice::ReadWrite)){ //ReadOnly檔案不存在,開啟失敗 //WriteOnly檔案不存在,會自動建立檔案 //ReadWrite檔案不存在,會自動建立檔案 //Append檔案不存在,會自動建立檔案 //Truncate檔案不存在,開啟失敗 //Text檔案不存在,開啟失敗 //Unbuffered檔案不存在,開啟失敗 qDebug()<<"開啟失敗"; }else{ qDebug()<<"開啟成功"; } //操作檔案 //關閉檔案 file.close();

寫檔案

    //example 2
    QFile file("test.csv");

    //判斷檔案是否存在
    if(file.exists()){
        qDebug()<<"檔案已存在";
    }else{
        qDebug()<<"檔案不存在";
    }
    //已讀寫方式開啟檔案,
    //如果檔案不存在會自動建立檔案
    if(!file.open(QIODevice::ReadWrite)){
        qDebug()<<"開啟失敗";
    }else{
        qDebug()<<"開啟成功";
    }

    //獲得檔案大小
    qint64 pos;
    pos = file.size();
    //重新定位檔案輸入位置,這裡是定位到檔案尾端
    file.seek(pos);

    QString content = "welcome to BeiJing";

    //寫入檔案
    qint64 length = -1;
    length = file.write(content.toLatin1(),content.length());

    if(length == -1){
        qDebug()<<"寫入檔案失敗";
    }else{
        qDebug()<<"寫入檔案成功";
    }

    //關閉檔案
    file.close();

控制檯執行結果:
這裡寫圖片描述
開啟檔案看看裡面的內容:
這裡寫圖片描述
正是我們程式中寫入的內容。

讀檔案
我們現在test.csv檔案內準備兩行資料
這裡寫圖片描述
程式碼如下:

    QFile file("test.csv");

    //判斷檔案是否存在
    if(file.exists()){
        qDebug()<<"檔案已存在";
    }else{
        qDebug()<<"檔案不存在";
    }
    //已讀寫方式開啟檔案,
    //如果檔案不存在會自動建立檔案
    if(!file.open(QIODevice::ReadWrite)){
        qDebug()<<"開啟失敗";
    }else{
        qDebug()<<"開啟成功";
    }

    //讀取檔案
    int line = 1;
    //判斷檔案是否已經讀到末尾了
    while(!file.atEnd()){
        char buffer[1024];
        //讀取一行資料
        qint64 length = file.readLine(buffer,1024);
        if(length != -1){
            qDebug()<<line++<<":"<<buffer;
        }
    }

    //關閉檔案
    file.close();

控制檯輸出結果如下:
這裡寫圖片描述
和我們開始檔案中準備的內容一致,表明已成功讀取。