Qt學習筆記:QDir
阿新 • • 發佈:2019-02-09
前言
接觸過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)
。
其中Filters filters
是一組二進位制的數,用於選擇過濾模式。
其中QDir::NoDotAndDotDot
就是過濾掉.
和..
的意思。
需要注意的是,qt預設的filter值是QDir::AllEntries,如果你重新設定了filters,那麼你至少要保證QDir::Dirs
,QDir::Files
,QDir::Drives
存在其中之一,否則你無法得到任何實體。
舉例:
QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot);
qDebug()<<dir->entryList();
顯示結果為空
必須改為:
QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot|QDir::AllEntries);
qDebug()<<dir->entryList();
才得到正確結果。
參考文獻: