Qt學習筆記#7:QDir


前言

接觸過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::DirsQDir::FilesQDir::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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章