QT開發(二十四) QT檔案操作

2021-07-29 13:31:23 字數 3170 閱讀 6284

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是字元陣列名或...