Qt之QDir

簡述

利用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助手

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