QT學習之文件系統讀寫類
QIODevice
QFileDevice
QBuffer
QProcess
和QProcessEnvironment
QFileDevice
QFile
QFileInfo
QT5 Input/Output 類圖
QFile
QFile
類用來對文件的操作:
頭文件 | #include <QFile> |
---|---|
模塊 | QT += core |
基類 | QFileDevice. |
子類 | QTemporaryFile |
使用QFile可以打開關閉文件,並對文件進行處理。其主要使用方法有:
- 文件的讀寫
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
text=read.readAll();
}
read.close();
QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
write.write(text,qstrlen(text));
}
write.close();
- 文件的讀寫--使用流
QString text;
QFile read(oldPath);
if(!read.exists())return;
if(read.open(QIODevice::ReadOnly)){
QTextStream in(&read); //使用流進行讀寫
in.setCodec("UTF-8"); //設置讀時編碼
text=in.readAll(); //使用流讀取全部文件
}
read.close();
QFile write(newPath);
if(write.open(QIODevice::WriteOnly)){
QTextStream out(&write);
out.setCodec("UTF-8");
out<<text;
}
write.close();
- 復制文件
QFile::copy(oldFilePath,newFilePath);
//其中oldFilePath文件必須存在,newFilePath的路徑中不能包含不存在的路徑!
- 刪除文件
bool QFile::remove()
bool QFile::remove(const QString & fileName) [static]
- 給文件重命名
bool QFile::rename(const QString & newName)
bool QFile::rename(const QString & oldName, const QString & newName) [static]
- 為新文件創建路徑
QDir dir;
dir.mkpath(dirpath);
//創建新目錄,dirpath中的所有未創建的子文件夾都將被創建
dir.setPath(dirCur);//設置當前路徑
dir.mkdir(dirName);
//創建子目錄,在當前目錄下創建一個子文件夾dirName
QFileInfo類處理文件的信息,構造函數:
QFileInfo()
QFileInfo(const QString & file)
QFileInfo(const QFile & file)
QFileInfo(const QDir & dir, const QString & file)
QFileInfo(const QFileInfo & fileinfo)
常用方法,假設文件為:"E:/dirPath/fileName.sfx"
- 獲取文件名,包含后綴
QString fileName() const // 返回值為: "fileName.sfx"
- 獲取文件路徑,到文件所在當前目錄,不包含最后的 "/"
QString filePath() const // 返回值為: "E:/dirPath"
QDir dir() const
- 獲取文件后綴,不包括 "."
QString suffix() const // 返回值為: "sfx"
- 判斷文件是否存在,一般處理文件之前,都應先調用此方法
bool exists() const
- 返回文件的絕對路徑
QString QFileInfo::absoluteFilePath() const // 返回包括文件名的絕對路徑。
QString QFileInfo::absolutePath() const // 返回不包括文件名的絕對路徑。
QDir QFileInfo::absoluteDir() const
- 返回文件的基名稱
QString QFileInfo::baseName() const
eg:
QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName(); // base = "archive"
QDir 類處理有關文件目錄路徑問題,構造函數
QDir(const QDir & dir)
QDir(const QString & path = QString())
QDir(const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ), Filters filters = AllEntries)
- 獲取目錄內指定后綴的文件,獲取的文件的路徑(絕對路徑)
QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
eg:
QStringList fileList;
fileList<<"*.xml"<<"*.txt"; //只顯示xml文檔和txt文檔
QDir dir;
dir.setPath(dirPath);
if(!dir.exists())return;
//設置目錄下顯示的內容,這里只顯示文件,不顯示文件夾
dir.setFilter(QDir::Files);
//設置目錄下文件的排序方式,這里為按名稱排序
dir.setSorting(QDir::Name);
//設置過濾字段
dir.setNameFilters(fileList);
//獲取目錄下對應文件
QFileInfoList list = dir.entryInfoList();
QSaveFile
QSaveFile類是為了安全的進行寫操作而設計的,用來寫入文本和二進制數據到文件中,當寫入操作失敗時,不會丟失要寫入的數據。
當要寫入數據時,會先建立一個臨時的文件保存要寫入的數據。如果在寫入過程中沒有錯誤發生,則使用commit()
提交到最終要寫入的文件中去。這種機制確保了一旦發生寫入錯誤,寫入的文件中不會沒有數據。並且沒有部分寫入的文件總是出現在最后的位置。當向磁盤寫入文檔時經常使用此類。
QSaveFile會在寫入過程中自動的檢查錯誤。可以像QFile類那樣來進行操作文件,使用 open()
打開文件,也可以使用繼承自QIODevice 類的方法操作。但不能使用close()
,而是使用commit()
!由於應用程序出錯導致的呼叫 cancelWriting()
,即使調用 commit()
也不會進行保存。
其自身Public 方法:
QSaveFile(const QString & name)
QSaveFile(QObject * parent = 0)
QSaveFile(const QString & name, QObject * parent)
~QSaveFile()
void cancelWriting()
bool commit()
bool directWriteFallback() const
void setDirectWriteFallback(bool enabled)
void setFileName(const QString & name)
QTemporaryDir
QTemporaryDir用於安全的建立一個臨時的目錄,目錄名由類構造函數自動生成。使用 QString path() const
獲取路徑。
其自身公用方法有:
QTemporaryDir()
QTemporaryDir(const QString & templatePath)
~QTemporaryDir()
bool autoRemove() const
bool isValid() const
QString path() const
bool remove()
void setAutoRemove(bool b)
QT給出的列子:
// Within a function/method...
QTemporaryDir dir;
if (dir.isValid()) {
// dir.path() returns the unique directory path
}
// The QTemporaryDir destructor removes the temporary directory
// as it goes out of scope.
QTemporaryFile
QTemporaryFile用於安全的創建一個臨時文件。調用open()
時自動創建。自身公共方法有:
QTemporaryFile()
QTemporaryFile(const QString & templateName)
QTemporaryFile(QObject * parent)
QTemporaryFile(const QString & templateName, QObject * parent)
~QTemporaryFile()
bool autoRemove() const
QString fileTemplate() const
bool open()
void setAutoRemove(bool b)
void setFileTemplate(const QString & name)
QT給出的使用列子:
// Within a function/method...
QTemporaryFile file;
if (file.open()) {
// file.fileName() returns the unique file name
}
// The QTemporaryFile destructor removes the temporary file
// as it goes out of scope.
QDirIterator
QDirIterator用於遍歷目錄,無基類!
Constant | Value | Description |
---|---|---|
QDirIterator::NoIteratorFlags | 0x0 | 默認情況,迭代器將返回指定目錄的條目 |
QDirIterator::Subdirectories | 0x2 | 列出指定目錄的所有子條目(包括子目錄下的目錄) |
QDirIterator::FollowSymlinks | 0x1 | 在Subdirectories條件下忽略符號鏈接 "." 或者 ".." |
其自身公有方法:
QDirIterator(const QDir & dir, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, QDir::Filters filters, IteratorFlags flags = NoIteratorFlags)
QDirIterator(const QString & path, const QStringList & nameFilters, QDir::Filters filters = QDir::NoFilter, IteratorFlags flags = NoIteratorFlags)
~QDirIterator()
QFileInfo fileInfo() const
QString fileName() const
QString filePath() const
bool hasNext() const
QString next()
QString path() const
QT給出的例子:
QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext()) {
qDebug() << it.next();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}
QStandardPaths
QStandardPaths用於處理系統標准路徑。
QString displayName(StandardLocation type)
QString findExecutable(const QString & executableName, const QStringList & paths = QStringList())
QString locate(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
QStringList locateAll(StandardLocation type, const QString & fileName, LocateOptions options = LocateFile)
void setTestModeEnabled(bool testMode)
QStringList standardLocations(StandardLocation type)
QString writableLocation(StandardLocation type)
enum LocateOption { LocateFile, LocateDirectory }
flags LocateOptions
enum StandardLocation { DesktopLocation, DocumentsLocation, FontsLocation, ApplicationsLocation, ..., GenericConfigLocation }
QT Dialogs類圖
這里只簡單說一下QFileDialog類:
頭文件 | #include <QFileDialog> |
---|---|
模塊 | QT += widgets |
基類 | QDialog |
常用靜態成員函數:
- 打開一個獲取目錄的對話框
QString getExistingDirectory( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly)
QUrl getExistingDirectoryUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), Options options = ShowDirsOnly, const QStringList & supportedSchemes = QStringList())
- 打開一個選擇文件的對話框
QString getOpenFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QStringList getOpenFileNames(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl getOpenFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
QList<QUrl> getOpenFileUrls( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
- 打開另存為對話框,返回另存為文件的全路徑地址
QString getSaveFileName( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QUrl getSaveFileUrl( QWidget * parent = 0, const QString & caption = QString(), const QUrl & dir = QUrl(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0, const QStringList & supportedSchemes = QStringList())
其中 QString & filter = QString()
代表文件過濾器,寫法如下:
QStringList ls=
QFileDialog::getOpenFileNames(this
,tr("選用文件")
,QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)
,tr("XML文件 (*.xml);;文本文件(*.txt"));