qt中的io操作通過統一的介面簡化了檔案與外部裝置的操作方式,qt中檔案被當作一種特殊的外部裝置,檔案操作與外部裝置操作相同。
開啟裝置:bool open(openmode mode)
讀取資料:qbytearray read(qint64 maxsize)
寫入資料:qint64 write(const qbytearray & bytearray)
關閉裝置:void close()
io操作的本質是連續儲存空間的資料讀寫
順序訪問裝置:只能從頭開始順序讀寫資料,不能指定資料的讀寫位置
隨機訪問裝置:可以定位到任意位置進行資料的讀寫
qt中io裝置的繼承類圖:
qfile是qt中用於檔案操作的類,qfile物件對應實際的檔案。
void write(qstring f)} void read(qstring f)}
qfileinfo類用於讀取檔案的屬性資訊
qfile file(f); qfileinfo info(file); qdebug() <
qtemporaryfile是qt中的臨時檔案操作類,用來安全建立全域性唯一的臨時檔案,qtemporaryfile物件銷毀時對應的臨時檔案將被刪除,臨時檔案的開啟方式為qiodevice::readwrite,臨時檔案常用於大資料傳遞或者程序間通訊場合。
qtemporaryfile tempfile;
if( tempfile.open() )
qt中將檔案分為文字檔案和資料檔案,文字檔案內容是可讀的文字字元,資料檔案的內容是二進位制資料。
qfile直接支援文字檔案和資料檔案的操作,主要函式介面如下:
qint64
read
( char * data, qint64 maxsize)
qbytearray
read
( qint64 maxsize)
qint64
write
(const char * data, qint64 maxsize)
qint64
write
(const qbytearray & bytearray)
為了簡化文字檔案和資料檔案的讀寫操作,qt提供了qtextstream和qdatastream輔助類。qtextstream可將寫入的資料全部轉換為可讀文字,qdatastream可將寫入的資料根據型別轉換為二進位制資料。
qfile file(f); if( file.open(qiodevice::writeonly | qiodevice::text) ) if( file.open(qiodevice::readonly | qiodevice::text) ) file.close(); }
qfile file(f); if( file.open(qiodevice::writeonly) ) if( file.open(qiodevice::readonly) )
qdatastream在不同的qt版本中資料流檔案格式可能是不同的,如果資料流檔案需要在不同版本的qt程式間傳遞時需要考慮版本問題。
void setversion(int v)
int version() const
qt中預定義了緩衝區的類qbuffer,可以將緩衝區看成一種特殊的io裝置,檔案流輔助類可以直接用於操作緩衝區。qbuffer緩衝區寫入和讀取的資料必須是同一種資料型別,不能混合多種資料型別。
qbuffer的使用場合:
a、執行緒間不同型別的資料傳遞
b、快取外部裝置中的資料返回
c、資料讀取速度小於寫入速度
qbuffer使用方法如下:
qbytearray array; qbuffer buffer(&array); if(buffer.open(qiodevice::writeonly)) if(buffer.open(qiodevice::readonly))
qt中提供了目錄操作類qdir,qdir功能如下:
a、目錄分隔符統一使用』/』
b、能夠對目錄進行任意操作(建立、刪除、重新命名)
c、能夠獲取指定目錄中的所有條目(檔案和資料夾)
d、能夠使用過濾字串獲取指定條目
e、能夠獲取系統中的所有根目錄
qdir使用方法如下:
qdir dir; qstring path("d:/download/qt實驗分析教程/第2期 — 否極泰來/第34課 - 緩衝區操作與目錄操作/**/34-3"); if(!dir.exists()) else }
計算檔案大小
unsigned int filesize(qstring path) else if(info.isdir()) } } return ret;}
qt中預定義了用於監控檔案和目錄變化的類qfilesystemwatcher,
qfilesystemwatcher主要功能如下:
a、能夠監控特定目錄和檔案的狀態
b、能夠同時對多個檔案和目錄進行監控
c、當目錄或檔案發生改變時觸發訊號
d、通過訊號與槽的機制捕捉訊號並做出響應
通常要使用qfilesystemwatcher需要自定義檔案監視類。
watcher.h
#ifndef watcher_h#define watcher_h#include #include class watcher : public qobject;#endif // watcher_h
watcher.cpp
#include "watcher.h"#include watcher::watcher(qobject *parent) :qobject(parent)void watcher::filechanged(const qstring & path)void watcher::addpath(qstring path)
main.c QT開發之檔案操作
1 根據軟體目錄路徑來操作檔案 filename filename abc.json qfile file filename if file.open qiodevice readwrite 如果abc檔案不存在就建立 else file.resize 0 2 使用使用者目錄來操作檔案 qdir p...
QT檔案操作
qt通過統一的方式讀寫檔案和外部裝置 qt中io裝置的型別分為順序訪問和隨機訪問兩種 qfile提供了檔案操作相關的方法 qfileinfo提供了讀取檔案屬性相關的方法 qt中提供了臨時檔案操作類qtemporaryfile include include include include inclu...
指標學習二十四 檔案讀寫函式2
1.fputs 函式 fputs s,fp s是要寫入的字串,可以是字元陣列名,字元型指標變數或字串常量 fp是檔案指標 該函式把s寫入檔案,字串s的結束符 0 不寫入檔案,如函式執行成功,則函式返回所寫的最後乙個字元。否則,則返回eof2.fgets函式 fgets s,n,fp s是字元陣列名或...