前言
接觸過DOS系統的同學就知道,dir命令就是瀏覽當前目錄下的所有文件及文件夾,和linux下面的ls命令類似。
顧名思義,QDir類就是用來訪問系統目錄結構的一個類。
關於QDir類的具體用法,官方文檔講得非常清楚,這裏就不詳細介紹,本文主要記錄作者覺得值得重點介紹的函數方法。
獲取當前文件目錄
獲取當前**程序**所在的目錄。
[static] QString QDir::currentPath()
獲取當前**可執行文件**所在的目錄。
[static] QString QCoreApplication::applicationDirPath()
注意兩者的區別,第一中可以理解爲取得當前項目所在的目錄,第二個則直接得到exe文件(在window系統中)所在的位置。
獲取當前文件的父目錄
bool QDir::cdUp()
QDir *dir = new QDir(filepath);
dir->cdUp()
QString path = dir->absolutePath();
或者也可以
QDir *dir = new QDir(filepath);
QString name = dir->dirName();
filepath.remove(name);
得到所有的文件信息
返回一個字符串列表,裏面保存了該目錄下所有文件及文件夾的名字。
QStringList QDir::entryList()
返回一個QFileInfoList,裏面保存了該目錄下所有文件及文件夾的信息。
QFileInfoList QDir::entryInfoList()
這兩個方法都可以配合下面三種方法使用:
void QDir::setNameFilters(const QStringList &nameFilters)
void QDir::setSorting(SortFlags sort)
void QDir::setFilter(Filters filters)
過濾掉多餘目錄
默認情況下,得到的所有文件及文件夾名字一定包括這兩個目錄
/.
/..
如果我們想過濾掉這兩個目錄,那我們需要
setFilter(Filters filters)
舉例:
QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot);
qDebug()<<dir->entryList();
顯示結果爲空,原因filter的默認值是QDir::AllEntries
如果你重新設定了filters,那麼你至少要保證QDir::Dirs
,QDir::Files
,QDir::Drives
存在其中之一,否則你無法得到任何實體。
dir->setFilter(QDir::AllEntries|QDir::Dirs|QDir::Files|QDir::Drives);
必須改爲:
QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot|QDir::AllEntries);
qDebug()<<dir->entryList();
纔得到正確結果。
參考文獻:
http://doc.qt.io/qt-5/qdir.html