From Gossip@caterpillar

Qt3 Gossip: QFile 類別

接下來的幾個主題,我們將直接取自Qt的線上文件作些修改,因為Qt的線上文件都已經很清楚的說明了這些類別的作用,我們親自寫也不一定寫得出更詳細的入門內容,故作這樣的呈現方式,如果可以的話,當然由您親自看看線上文件會更清楚,我們也鼓勵您這麼作。

回到正題,以下是取自QFile類別的Qt線上說明,翻譯並作些改寫。

QFile類別是對檔案作操作的I/O裝置。

QFile是用來讀取與寫入二進位檔案及文字檔案的I/O裝置,QFile可以單獨使用,或是使用於QDataStream或QTextStream,這會比單獨使用QFile更加容易。

您可以在QFile物件的建構函式中設定要開啟的檔案名稱,或是使用setName()來指定檔案名稱,然後您可以使用exists()方法來測試檔案是否存在,使用remove()方法來移除一個檔案。

使用open()方法可以開啟檔案,使用close()方法關閉,而使用flush()方法來將資料flush出去,通常我們使用QDataStream 或QTextStream來讀寫檔案,但是您也可以使用readBlock()與readLine()方法來讀取檔案,使用writeBlock()方法 來寫入檔案,QFile也支援getch()、ungetch()與putch()等方法。

我們可以使用size()方法取得檔案的大小,您可以使用at()方法取得檔案目前的位置或是將它移至新的位置,如果您讀取檔案至尾端了,atEnd()方法會傳回TRUE值。

下面的程式碼片段使用了QTextStream來一行一行的讀取一個文字檔案,並將結果加上行號顯示在主控台上:
    QStringList lines;
    QFile file( "file.txt" );
    if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        QString line;
        int i = 1;
        while ( !stream.atEnd() ) {
            line = stream.readLine(); // line of text excluding '\n'
            printf( "%3d: %s\n", i++, line.latin1() );
            lines += line;
        }
        file.close();
    }


寫入文字至檔案也很簡單,下面的例子告訴您如何將方才我們讀入至stringlist的文字寫入另一個檔案:
    QFile file( "file.txt" );
    if ( file.open( IO_WriteOnly ) ) {
        QTextStream stream( &file );
        for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
            stream << *it << "\n";
        file.close();
    }