1.Qt IO
裝置型別:
- 順序儲存裝置:如網路卡。。
- 隨機儲存裝置:如.txt..
Qt中IO裝置繼承圖
Qt中的檔案系統
通用開發庫,跨平臺
QIODevice IO父類,提供位元組塊讀寫通用操作和基本介面
QFileDevice提供檔案操作通用實現
QFile訪問本地檔案或嵌入資源
QTemporayFile建立和訪問本地系統的臨時檔案
QBuffer讀寫QbyteArray,記憶體檔案
QProcess執行外部程式,處理程序間通訊
QAbstractSocket所有套接字類的父類
QTcpSocket TCP協議網路資料傳輸
QUdpSocket 傳輸UDP報文
QSslSocket 使用SSL/TSL傳輸資料
同步IO/非同步IO
非同步IO也就是重疊(overlap)IO
QIODevice
QIODevice是抽象的,不能被例項化,提供抽象介面
QIODevice是區分兩種裝置的:隨機訪問裝置,順序裝置
隨機訪問裝置:支援透過()查詢任意位置。檔案當前位置透過pos()獲取。例:QFile,QBuffer
順序裝置:不支援尋找任意位置。資料必須在一次傳遞中獲取。pos()和size()不適用於順序裝置。例:QTcpSocket,QProcess
可以使用isSequential()來確定裝置型別
資料可用時,QIODevice發出readyRead()。可以使用bytesAvailable()確定可供閱讀的位元組數。
QIODevice向裝置寫入資料fwrite時會發出bytesWritten()訊號。使用bytesToWrite()來確定等待寫入的當前資料大小。
QIODevice某些子類是非同步的,如QTcpSocket,QProcess,諸如write()和read()之類的輸入輸出函式總是立即返回的。
QIODevice提供了一些功能,允許您立即執行這些操作,同事阻塞呼叫執行緒,而不需要進入時間迴圈。
waitForReadyRead() 在呼叫執行緒中暫停操作,知道新的資料可用來讀取
waitForBytesWritten() 在呼叫執行緒中掛起操作,直到將資料的一個有效負載寫入到裝置
waiFor....() QIODevice的子類實現特定於裝置的操作的阻塞函式
QDir
獲取當前目錄
[static] QString QDir::currentPath() //取得當前專案所在的目錄
[static] QString QCoreApplication::applicationDirPath() //取得exe檔案(在windows系統中)所在的目錄
切換到當前檔案父目錄
bool QDir::cdUp()
absolutePath()獲取絕對路徑
得到所有檔案資訊
QStringList:: QDir::entryList()//返回該目錄下所有檔案及資料夾名字的列表
QFileInfoList QDir::entryInfoList()//返回該目錄下所有檔案和資料夾資訊的列表
QDir mDir("D:/qttest")
mDir.exits();//檔案是否存在
mDir.absolutePath("a.txt")//返回指定目錄下指定檔案的絕對路徑
mDir.dirName();//剝離掉路徑,只返回目錄的名字
QFile
bool QFile::open(OpenMode mode)
引數:決定檔案以何種方式開啟
QIODevice::ReadOnly,WriteOnly(只寫,開啟時原內容清空,檔案不存在則建立),ReadWrite,Append,Truncate(重寫方式開啟,檔案原有內容全部清空),Text(文字方式開啟'\n'翻譯為換行符,寫入時,將行結束符轉換成本地格式)
close();//關閉檔案
read();//讀檔案,引數為讀取的長度大小(必填)fread
readLine();//讀取一行
readAll();//讀取所有
write();//向檔案中寫入資料
atEnd();//判斷是否到達檔案尾
seek();//將檔案指標定位到指定位置處
pos();//獲取檔案指標當前位置
bool QFile::copy(const QString &newName)//檔案複製
bool exits() const;//檔案是否存在
bool link(const QString &linkName)//建立連線(快捷方式)
bool remove()//刪除一個檔案
bool rename(const QString &newName)//重新命名
void setFileName(const QString &name) //設定檔名
//靜態成員
bool copy(const QString &fileName, const QString &newName)
bool setPermissions(const QString &fileName, Permission permissions)
Permissions permissions(const QString &fileName)
使用流程:
1.QFile建立一個檔案物件
2.open()開啟這個檔案
3.可以使用QFileInfo獲取有關該檔案的資訊
或者進行讀寫操作
QFileInfo有很多函式:
isDir();
isExecutable()//是否是可執行檔案
baseName()//直接獲得檔名
completeBaseName()//獲取完整檔名
suffix()//直接獲取檔案字尾名
completeSuffix()//獲取完整的檔案字尾