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
|
|
|