QDir官方幫助文檔-詳細介紹部分(個人翻譯)

QDir類用於訪問目錄及其內容。QDir用於處理路徑名,獲取路徑及文件的相關信息,以及操作底層文件管理系統。他也可用於訪問Qt資源系統。
類似URLs,Qt將'/'作通用目錄分隔符。Qt會將以'/'作爲目錄分隔符的路徑翻譯給底層文件系統。
QDir用相對路徑或絕對路徑表示文件位置。絕對路徑以'/'開始(windows下,路徑前是否加驅動器可選)。相對路徑以目錄名或文件名開始,是一個相對於當前目錄的路徑。

絕對路徑例子:

  QDir("/home/user/Documents")
  QDir("C:/Documents and Settings")
windows下,上面的第2個例子,訪問文件時,會被翻譯成 C:\Documents and Settings。

相對路徑例子:
QDir("images/landscape.png")

isRelative()和isAbsolute()用於查詢QDir使用的是相對路徑,還是絕對路徑。makeAbsolute()將相對路徑轉換爲絕對路徑。

導航和目錄操作

path()用於獲取目錄路徑,setPath()用於設置新路徑。absolutePath()用於獲取目錄的絕對路徑。
dirName()返回目錄名稱,返回值爲絕對路徑的最後一個元素,表示目錄的位置。若QDir表示當前目錄,dirName()返回"."。

 QDir("Documents/Letters/Applications").dirName() // "Applications"
  QDir().dirName()                                 // "."

cd()、cdUp()能修改目錄所在路徑,他們運行方式與命令行(shell commands)類似。調用cd(),傳入一個存在的目錄,QDir對象用修改目錄,用新目錄代替原有目錄。調用cdUp(),QDir對象指向原有目
錄的父目錄。cdUp()等同於cd("..")。

mkdir()用於創建目錄,rename()用於修改目錄名稱,rmdir()用於刪除目錄。
exists()用於查詢目錄是否存在。isReadable()、isAbsolute()、isRelative()和isRoot()用於查詢目錄屬性。
refresh()用於從磁盤中重新讀取目錄數據。

文件和目錄相關內容:
目錄下包含的條目有,文件、目錄、符號鏈接。count()用於返回目錄下的條目數量。entryList()用於返回目錄下所有條目的名稱列表。entryInfoList用於獲取所有條目的詳細信息,每個條目的詳細信息
用QFileInfo表示。

filePath()和absoluteFilePath()用於創建目錄下文件和目錄的路徑。
filePath()用於返回指定文件或目錄的相對路徑(以QDir對象爲參照)。absoluteFilePath()用於返回指定文件或目錄的絕對路徑。這兩條函數都不檢查文件或目錄是否存在。他們僅構造路徑。
QDir directory("Documents/Letters");
  QString path = directory.filePath("contents.txt");
  QString absolutePath = directory.absoluteFilePath("contents.txt");
remove()用於刪除文件。目錄不能像文件那樣被刪除,用rmdir()來刪除他們。
在QDir對象上應用過濾器filter,可能會降低entryList()和entryInfoList()返回的條目數量。你可以給QDir對象設置一個名稱過濾器(需設定一個通配符,表明文件名稱需要匹配的條件)、一個屬性過濾
器(需選定條目若干屬性,能區別出文件和目錄)和一個排序。
名稱過濾器是一些字符串列表,由setnameFilters()傳入。多屬性過濾器可由多個單屬性過濾器的位或組合而成,由setFilter()傳入設定。setSorting()用於設置排序順序,設置內容爲多個排序標識的位
或組合。用match()測試文件名是否匹配過濾器。


調用entryList() and entryInfoList(),可能也需要設置過濾器和排序標識,從而重寫了以前操作。


當前路徑和其他指定路徑

一組返回值爲QDir的靜態函數爲普通目錄提供訪問服務
。此外,還有一組對應的返回值爲字符串的函數:
QDir        QString        返回值
current()  currentPath()  應用工作目錄
home()     homePath()     用戶家目錄
root()     rootPath()     根目錄
temp()     tempPath()     系統臨時目錄

靜態函數setCurrent()用於設置應用工作目錄。
若想獲得應用執行文件所在目錄,詳見QCoreApplication::applicationDirPath()。
靜態函數drives()返回每一個裝有文件管理系統設備的根目錄列表。Unix系統下,返回的列表內僅有一個根目錄"/"。windows下,通常包含C:/,也有可能有其他盤符D:/,結果取決於用戶系統的設定。


路徑操作和字符串

"."代表當前目錄,包含"."的路徑都是當前目錄的相對路徑, ".."代表父目錄, 用canonicalPath()設置canonical格式,可減少符號鏈接數量。
用cleanPath()可簡化路徑,刪除其內多餘的"/"和".."。

當需要顯示用戶平臺的本地風格路徑時,靜態函數toNativeSeparators(),將指定的路徑中的分隔符替換爲與底層操作系統一致的分隔符後,後返回該路徑拷貝值。
例子:
檢查路徑是否存在:
QDir dir("example");
  if (!dir.exists())
      qWarning("Cannot find the example directory");
(也能用更方便的QFile::exist())


遍歷目錄並讀文件:
 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());
  }

以下程序列出當前目錄下所有文件(除了符號鏈接),按大小排序,小的在前:
  #include <QDir>
  #include <iostream>

  int main(int argc, char *argv[])
  {
      QCoreApplication app(argc, argv);
      QDir dir;
      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;
      }
      return 0;
  }

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