QFileInfo 與 QDir


QFileInfo 顧名思義,就是用來取得指定的檔案之相關訊息,像是相對或絕對路徑資訊、隱藏屬性、大小、最後更新等,為了加快存取檔案的資訊,QFileInfo會快取 資訊,如果檔案在快取資訊之後,被使用者作了修正,則可以使用refresh()更新QFileInfo的資訊。QFileInfo可以是符號鏈結 (Symbol Link)、目錄或檔案,由isFile()、isDir()與isSymLink()來作判斷。

QDir則可以讓您指定目錄,以取得所指定目錄或其中的項目資訊(檔案、目錄等),您可以設定名稱過濾、屬性過濾(像是唯讀、檔案或是目錄等等)與排序,過濾與排 序可以使用setNameFilter()、setFilter()與setSorting()方法來設定,您可以使用entryList()來取得一個目錄下的所有檔案與子目錄字串名稱,或是使用entryInfoList()傳回QFileInfoList,當中包括目錄中所有項目的QFileInfo指標。

跟目錄有關的操作,也可以透過QDir來達成,例如使用mkdir()方法可以建立一個新的目錄,使用rename()方 法來更改目錄名稱,使用rmdir()方法將一個已經存在的目錄移除,使用remove()方法來移除檔案,您可以使用exists()、 isReadable()與isRoot()方法來測試目錄。 根目錄的顯示是由drives()提供;在Unix系統下這會傳回包括根目錄"/"的列示;在Windows下則通常包括"D:/"等。 如果您想要路徑的形式是基於作業系統的適當形式,使用convertSeparetors()。

以下這個程式使用QDir與QFileInfo來查詢目前目錄下的項目資訊:
#include <QDir>
#include <QFileInfo>
#include <QFileInfoList>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {
QDir d;
d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
d.setSorting( QDir::Size | QDir::Reversed );

const QFileInfoList list = d.entryInfoList();
QFileInfoList::const_iterator iterator = list.begin();

cout << "Filename\t\tSize" << endl;
while ( iterator != list.end() ) {
cout << qPrintable((*iterator).fileName()) << "\t"
<< (*iterator).size() << endl;
++iterator;
}

return 0;
}

一個查詢指定目錄下所有子目錄與檔案的程式,可以參考
QTreeWidget 與 QTreeWidgetItem