簡述
利用QDir,我們可以獲取目錄結構和它們的內容。
QDir被用來操作路徑,並獲取和該路徑有關的信息。QDir也可以被用來處理Qt的資源系統。
Qt使用"/“作爲全局目錄分隔符。如果你總是用”/"作爲目錄分隔符來表示一個路徑,Qt將會把你給的路徑轉換成本地操作系統所對應的路徑形式。
QDir既可以使用相對路徑,也可以使用絕對路徑。
絕對路徑的例子如下:
QDir("/home/user/Documents")
QDir("C:/Documents and Settings")
在Windows上,第二個案例將會被轉換成"C:\Document and Settings"。
相對路徑的例子如下:
QDir("images/landscape.png")
可以通過isRelative()或者isAbsolute()來檢查QDir是使用相對路徑還是絕對路徑。使用makeAbsolute可以將一個相對路徑的QDir轉換成絕對路徑。
使用
創建QDir
QDir的構造函數有三個版本,如下所示
QDir(const QDir &dir);
QDir(const QString &path = QString());
QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries);
前兩個比較容易理解,第三個稍顯複雜,下面分別介紹它的四個參數含義:
- path:路徑字符串
- nameFilter:文件過濾模式,用來過濾一些不想要的文件名,默認是不過濾任何東西
- sort:排序規則,默認是Name | IgnoreCase,即根據名稱排列,忽略字母大小寫
- filters:過濾器,默認是AllEntries
上面的四個參數也可以在創建QDir之後利用setPath(),setFilter(),setNameFilters(),setSorting()來修改。如果不提供任何路徑信息給給QDir,默認路徑被設爲應用程序當前所在路徑。
檢查目錄是否存在
QDir dir("example");
if (!dir.exists())
qWarning("Cannot find the example directory");
也可以使用靜態函數QFile::exists()。
遍歷目錄並讀取文件
QDir dir = QDir::root(); // "/"
if (!dir.cd("tmp")) { // "/tmp"
qWarning("Cannot find the \"/tmp\" directory");
} else {
QFile file(dir.filePath("ex1.txt")); // "/tmp/ex1.txt"
if (!file.open(QIODevice::ReadWrite))
qWarning("Cannot create the file %s", file.name());
}
列出文件。
列出目錄的所有文件(除了符號鏈接),並根據文件大小排列,最小的在最前面
QDir dir("C:/Users/jiage/Desktop/folder/blog");
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = dir.entryInfoList();
std::cout << " Bytes Filename" << std::endl;
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)
.arg(fileInfo.fileName()));
std::cout << std::endl;
}
常用接口
常用靜態函數
QDir提供了許多有用的靜態成員函數,如下所示
函數名稱 | 功能描述 |
---|---|
QDir current() | 返回當前應用程序所在目錄 |
QString currentPath | 返回當前應用程序所在目錄的絕對路徑 |
QFileInfoList drives() | 返回當前系統的根目錄列表 |
QString fromNativeSeparators() | 用於本地路徑格式到Qt標準路徑格式的轉換 |
QDir home() | 返回用戶home目錄 |
QString homePath() | 返回用戶home目錄的絕對路徑 |
QDir root() | 返回根目錄 |
bool match() | 字符串匹配判定 |
QDir rootPath() | 返回根目錄的絕對路徑 |
QChar separator() | 返回本地路徑分隔符 |
QString toNatieSeparators() | 將Qt路徑分隔符轉換爲本地路徑分隔符 |
QDir temp() | 返回本地temp目錄 |
QString tempPath() | 返回本地temp目錄的絕對路徑 |
常用公有函數
函數名稱 | 功能描述 |
---|---|
bool cd(const QString) | 改變QDir的目錄 |
bool cdUp() | 從QDir的當前目錄向上跳轉 |
uint count() | 獲取當前目錄中條目的數量,包括目錄和文件 |
bool exists() | 判斷給定文件名是否存在QDir對應的目錄中 |
QString filePath() | 返回QDir中文件的路徑,不檢查文件是否存在 |
bool mkdir() | 在QDir中創建子文件夾 |
bool mkpath | 根據給定的路徑創建目錄,並且會創建所有必要的父目錄。 |
void refresh | 刷新目錄 |
bool remove() | 移除目錄中的文件 |
bool removeRecursively() | 遞歸地移除目錄 |
bool rename() | 重命名 |
bool rmdir() | 移除目錄,該目錄必須爲空 |
bool rmpath() | 移除路徑,並且會移除路徑上的所有父目錄 |
void swap(QDir) | 實例交換,將當前的QDir換參數中提供的QDir,這個函數很快,而且從不失敗(牛逼)。 |
QFileInfoList entryInfoList() | 返回目錄中條目的信息列表 |
QStringList entryList() | 返回信息條目名稱列表 |
引用
[1] Qt助手