檔案操作是應用程式必不可少的部分。qt 作為乙個通用開發庫,提供了跨平台的檔案操作能力。qt 通過qiodevice提供了對 i/o 裝置的抽象,這些裝置具有讀寫位元組塊的能力。下面是 i/o 裝置的類圖(qt5):
檔案系統分類:
是指它們的資料只能訪問一遍:從頭走到尾,從第乙個位元組開始訪問,直到最後乙個位元組,中途不能返回去讀取上乙個位元組,這其中,qprocess、qtcpsocket、qudpsoctet和qsslsocket是順序訪問裝置。
可以訪問任意位置任意次數,還可以使用qiodevice::seek()函式來重新定位檔案訪問位置指標,qfile、qtemporaryfile和qbuffer是隨機訪問裝置,
檔案操作是應用程式必不可少的部分。qt 作為乙個通用開發庫,提供了跨平台的檔案操作能力。在所有的 i/o 裝置中,檔案 i/o 是最重要的部分之一。因為我們大多數的程式依舊需要首先訪問本地檔案(當然,在雲計算大行其道的將來,這一觀點可能改變)。qfile提供了從檔案中讀取和寫入資料的能力
。
我們通常會將檔案路徑作為引數傳給qfile的建構函式。不過也可以在建立好物件最後,使用setfilename()來修改。qfile需要使用 / 作為檔案分隔符,不過,它會自動將其轉換成作業系統所需要的形式。例如 c:/windows 這樣的路徑在 windows 平台下同樣是可以的。
qfile主要提供了有關檔案的各種操作,比如開啟檔案、關閉檔案、重新整理檔案等,注意預設只識別utf8
。我們可以使用qdatastream或qtextstream類來讀寫檔案
,也可以使用qiodevice類提供的read()、readline()、readall()以及write()這樣的函式
。值得注意的是,有關檔案本身的資訊,比如檔名、檔案所在目錄的名字等,則是通過qfileinfo獲取
,而不是自己分析檔案路徑字串。
//讀檔案
void widget::
on_buttonread_clicked()
ui->textedit-
>
settext
(arr);}
file.
close()
;}}//寫檔案操作
void widget::
on_buttonwrite_clicked()
file.
close();}}
幾種常見的轉換:
//qstring -> qbytearray
qstring buf =
"abc"
; qbytearray qbuf = buf.
toutf8()
;//qbytearray -> char*
char
* chs = qbuf.
data()
;//char* -> qstring
qstring qs =
qstring
(chs)
;//qstring -> char*
chch = qs.
tostdstring()
.c_str()
;
qfileinfo fileinfo
(path)
;qdebug()
<<
"filename"
<
filename()
;qdebug()
<<
"filesufix"
<
suffix()
;qdebug()
<<
"size"
<
size()
;qdebug()
<<
"create time"
<
created()
.tostring
("yyyy-mm-dd hh:mm:ss"
);
qfile file
("file.dat");
file.
open
(qiodevice::writeonly)
;qdatastream out
(&file)
;out <<
qstring
("the answer is");
out <<
(qint32)
42;
file.
close()
;// 如果不想關閉檔案,可以使用 file.flush();
接下來我們將儲存到檔案中的答案取出來
qfile file
("file.dat");
file.
open
(qiodevice::readonly)
;qdatastream in
(&file)
;qstring str;
qint32 a;
in >> str >> a;
qfile file
("file.dat");
file.
open
(qiodevice::readwrite);
qdatastream stream
(&file)
;qstring str =
"the answer is 42"
;stream << str;
qtextstream:
void widget::
writetextdate()
}void widget::
readtextdate()
}
30 QT 檔案系統概述
檔案操作是應用程式必不可少的部分。qt 作為乙個通用開發庫,提供了跨平台的檔案操作能力。qt 通過qiodevice提供了對 i o 裝置的抽象,這些裝置具有讀寫位元組塊的能力。下面是 i o 裝置的類圖 qt5 qiodevice 所有 i o 裝置類的父類,提供了位元組塊讀寫的通用操作以及基本介...
檔案系統 why檔案系統
為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...
檔案系統 檔案系統的架構
vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...