Qt学习笔记之文件处理
Qt提供了通用的文件處理類QFile和處理文本的QTextStream類和處理二進制數據的QDataStream類,這些流操作極大地方便了對文件的督促存儲。對文件信息和目錄進行操作的類是QfileIno,QDir和QDirIterator。要監視文件和目錄變化,則可以使用QFi了SystemWatcher類。
1. 文件處理類QFile
QFile類提供了一個從文件中讀取和寫入文件的接口。
QFile是一個用于讀寫文本、二進制文件和資源的I/O設備。QFile可以單獨使用,或者更方便地與QTextStream或QDataStream一起使用。
文件名通常在構造函數中傳遞,但是可以在任何時候使用setFileName()設置它。無論操作系統如何,QFile都期望文件分隔符為'/'。不支持使用其他分隔符(例如“\”)。
可以使用exists()檢查文件是否存在,并使用remove()刪除文件。(QFileInfo和QDir提供了更高級的文件系統相關操作。)
用open()打開文件,用close()關閉文件,用flush()刷新文件。
通常使用QDataStream或QTextStream讀取和寫入數據,但是也可以調用qiodevice繼承的函數read()、readLine()、readAll()和write()。QFile還繼承了getChar()、putChar()和ungetChar(),它們一次處理一個字符。
文件的大小由size()返回。您可以使用pos()獲取當前文件位置,或者使用seek()移動到新的文件位置。如果已經到達文件的末尾,atEnd()返回true。
1.1 讀寫文本文件
1.1.1?通過QIODevice來讀寫文件
#include <QCoreApplication> #include <QChar> #include <QString> #include <QDebug> #include <QFile> int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}while (!file.atEnd()) {QByteArray line = file.readLine();qDebug("%s",line.data());}return a.exec(); }1.1.2 通過QTextStream讀寫文本
#include <QCoreApplication> #include <QChar> #include <QString> #include <QDebug> #include <QFile> int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}QTextStream in(&file);QString line = in.readLine();while (!line.isNull()) {qDebug("%s",line.toLatin1().data());line = in.readLine();}return a.exec(); }?1.2 操作二進制文件
QDataStream類提供了將二進制文件串行化的功能。QDataStream實現了C++的基本類型的串行化,如char,short,int,char*等。
#include <QCoreApplication> #include <QChar> #include <QString> #include <QDebug> #include <QFile> #include <QDataStream> #include <QTextStream>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//! 二進制文件QFile fileBin("E:/work/qe/mytest1/file1.dat");fileBin.open(QIODevice::WriteOnly);QDataStream out(&fileBin);//! 文本文件QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}QTextStream in(&file);QString line = in.readLine();while (!line.isNull()) {qDebug("%s",line.toLatin1().data());line = in.readLine();out<<line;}file.close();fileBin.close();return a.exec(); }?1.3 臨時文件?
QTemporaryFile可以安全創建一個獨一無二的臨時文件,臨時文件可以用open()來創建,Qt可以保證臨時文件名不會重復。在臨時文件對象銷毀后,將自動刪除該臨時文件。臨時文件通過close()關閉后還可以再打開。只要臨時文件對象還沒有銷毀,臨時文件就一直存在并由QTemporaryFile內部保持打開。
系列臨時文件可以通過QDir::tempPath()來獲取。在linux系統上臨時目錄通過是tmp,在Windows上則是由環境變量TEMP或TMP指定的。
詳見《Qt學習筆記之QTemporaryFile》
2. 目錄操作
QDir類具有存取目錄結構和內容能力。使用QDir可以操作和存取目錄或文件信息、操作底層文件系統,而且可以存取Qt的資源文件。
#include <QCoreApplication> #include <QDebug> #include <QDir> #include <QFileInfo>void test_dir() {const char* PATH = "G:/ggg";QDir dir;if( !dir.exists(PATH) ) //判斷電腦里是否這個目錄{dir.mkdir(PATH); //創建問價目錄}if( dir.exists(PATH) ){dir.cd(PATH);QStringList list = dir.entryList();for( int i = 0; i < list.length(); i++ ) //打印目錄文件{qDebug() << list[i];}}}unsigned int calculate_size(QString path) //計算目錄文件的大小 {QFileInfo info(path);unsigned int ret = 0;if( info.isFile() ){ret = info.size();}else if( info.isDir() ){QDir dir(path);QFileInfoList list = dir.entryInfoList();for( int i = 0; i < list.length(); i++ ){qDebug()<<list[i].fileName();if(list[i].fileName() !="." && list[i].fileName() != ".."){ret = ret + calculate_size(list[i].absoluteFilePath());}}}return ret; }int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);test_dir();qDebug() << calculate_size("F:/論文");return a.exec();}參考資料:
1.?QT基礎:40---文本文件的讀寫(QFile、QTextStream)
2.?QT基礎:42---文件目錄操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)?
?
總結
以上是生活随笔為你收集整理的Qt学习笔记之文件处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt学习笔记之国际化
- 下一篇: Qt翻译相关类之QDataStream