QIODevice 是Qt中關於輸入輸出的基礎類別,其中關於檔案寫入與讀取的子類別是QFile,您可以使用exists()測試檔案是否存在,使用size()來取得檔 案大小,使用remove()來移除檔案,使用open()開啟檔案,使用readLine()讀取檔案,使用flush()確定寫出所有的資料,使用 close()關閉檔案等,如果在QFile離開呼叫的範圍之後,QFile也會自動關閉檔案。
QFile在開啟檔案的時候,可以設定開啟模式(OpenMode),例如QIODevice::ReadOnly、QIODevice:: WriteOnly、QIODevice::Append或QIODevice::ReadWrite等,您可以使用QFile來進行檔案讀取,但 QFile提供的是較低階的介面,通常會搭配QTextStream或QDataStream,在使用上較為方便,前者適用於純文字資料的讀取,後者為二 進位資料的存取。
以下的程式,直接使用QFile來進行檔案複製,程式使用QFile以唯讀方式讀取指定的來源檔案,以readAll()方式讀入資料為QByteArray,以唯寫方式寫入指定的目的檔案,將讀入的QByteArray使用write()寫入檔案,以完成複製的動作:
#include <QFile>
#include <QString>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
QString src(argv[1]);
QFile srcFile(src);
if (!srcFile.open(QIODevice::ReadOnly)) {
cerr << "Cannot open file for reading:"
<< qPrintable(srcFile.errorString()) << endl;
return false;
}
QString dest(argv[2]);
QFile destFile(dest);
if (!destFile.open(QIODevice::WriteOnly)) {
cerr << "Cannot open file for writing: "
<< qPrintable(destFile.errorString()) << endl;
return false;
}
QByteArray in = srcFile.readAll();
destFile.write(in);
return srcFile.error() == QFile::NoError
&& destFile.error() == QFile::NoError;
}
QFile的error()傳回代碼,表示檔案的讀取或寫入過程中是否有誤。程式執行時指定命令列引數如下以進行檔案複製:
qcopy caterpillar.jpg caterpillar_backup.jpg