Qt之讀寫檔案
阿新 • • 發佈:2019-01-10
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::NotOpen | 0x0000 | 不開啟 |
QIODevice::ReadOnly | 0x0001 | 只讀方式 |
QIODevice::WriteOnly | 0x0002 | 只寫方式,如果檔案不存在則會自動建立檔案 |
QIODevice::ReadWrite | ReadOnly | WriteOnly | 讀寫方式 |
QIODevice::Append | 0x0004 | 此模式表明所有資料寫入到檔案尾 |
QIODevice::Truncate | 0x0008 | 開啟檔案之前,此檔案被截斷,原來檔案的所有資料會丟失 |
QIODevice::Text | 0x0010 | 讀的時候,檔案結束標誌位會被轉為’\n’;寫的時候,檔案結束標誌位會被轉為本地編碼的結束為,例如win32的結束位’\r\n’ |
QIODevice::UnBuffered | 0x0020 | 不快取 |
下面通過程式碼來看看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();
控制檯輸出結果如下:
和我們開始檔案中準備的內容一致,表明已成功讀取。