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

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