1. 程式人生 > >Qt學習筆記:QDir

Qt學習筆記: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)
其中Filters filters是一組二進位制的數,用於選擇過濾模式。
其中QDir::NoDotAndDotDot就是過濾掉...的意思。

需要注意的是,qt預設的filter值是QDir::AllEntries,如果你重新設定了filters,那麼你至少要保證QDir::DirsQDir::FilesQDir::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();

才得到正確結果。

參考文獻: