QDir类【官翻】

QDir 类

QDir类提供对目录结构及其内容的访问。

Header:#include < QDir >
qmake:QT += core
Inherits:
Inherited By:

详述

QDir用于操作路径名、访问有关路径文件的信息以及操作底层文件系统。它也可以用来访问Qt的资源系统。

Qt使用“ /”作为通用目录分隔符,就像使用“ /”作为URL中的路径分隔符一样。 如果您始终使用“ /”作为目录分隔符,则Qt将转换您的路径以符合基础操作系统。

QDir可以使用相对路径或绝对路径指向文件。 绝对路径以目录分隔符(在Windows下为驱动器规范开头)开头。 相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。

绝对路径示例:

 QDir("/home/user/Documents")
 QDir("C:/Documents and Settings")

在Windows上,当用于访问文件时,上面的第二个示例将转换为C:\ Documents and Settings

相对路径的示例:

QDir("images/landscape.png")

可以使用isRelative() 或isAbsolute() 函数来检查QDir是使用相对还是绝对文件路径。 调用makeAbsolute() 将相对的QDir转换为绝对的QDir。

导航和目录操作

目录的路径可以通过path() 函数获得,而新路径可以通过setPath() 函数获得。 通过调用absolutePath() ,可以找到目录的绝对路径。

使用dirName() 函数可以找到目录的名称。 这通常会返回绝对路径中的最后一个元素,该元素指定目录的位置。 但是,它也可以返回“。” 如果QDir代表当前目录。

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

目录的路径也可以使用cd() 和cdUp() 函数进行更改,这两个函数的作用类似于熟悉的Shell命令。 当使用现有目录的名称调用cd() 时,QDir对象将更改目录,使其代替该目录。 cdUp() 函数更改QDir对象的目录,使其引用其父目录。 即cd(“ …”)等同于cdUp() 。

可以使用mkdir() 创建目录,使用rename() 重命名目录,并使用rmdir() 删除目录。

可以使用exist() 测试是否存在具有给定名称的目录,并且可以使用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对象,可以减少entryList() 和entryInfoList() 返回的条目数。 您可以应用名称过滤器来指定带有文件名需要匹配的通配符的模式,用于选择条目属性并可以区分文件和目录的属性过滤器以及排序顺序。

名称过滤器是传递给setNameFilters() 的字符串列表。 属性过滤器由过滤器的按位或组合组成,这些在调用setFilter() 时指定。 使用setSorting() 和SortFlags的按位OR组合指定排序顺序。

可以使用match() 函数测试文件名是否与过滤器匹配。

调用entryList() 和entryInfoList() 时,还可以指定过滤器和排序顺序标志,以覆盖先前定义的行为。

当前目录和其他特殊路径

提供了一些返回QDir对象的静态函数来访问某些公共目录。 也有相应的函数返回字符串:

QDirQStringReturn Value
current()currentPath()应用程序的工作目录
home()homePath()用户的主目录
root()rootPath()根目录
temp()tempPath()系统的临时目录

使用setCurrent() 静态函数还可用于设置应用程序的工作目录。

如果要查找包含应用程序可执行文件的目录,请参见QCoreApplication :: applicationDirPath() 。

使用drivers() 静态函数为包含归档系统的每个设备提供了一个根目录列表。 在Unix系统上,它返回一个包含单个根目录“ /”的列表。 在Windows上,取决于用户系统的配置,该列表通常将包含C:/,并可能包含其他驱动器号,例如D:/。

路径操作和字符串

包含“.”的路径 可以使用canonicalPath() 函数将引用当前目录的元素,引用父目录的“ …”元素和符号链接简化为规范形式。
也可以使用cleanPath() 删除多余的“ /”和“ …”元素来简化路径。

有时需要能够以本机表示形式显示用户平台的路径。 静态的toNativeSeparators() 函数返回指定路径的副本,在该副本中,每个目录分隔符都由基础操作系统的适当分隔符替换。

示例

检查目录是否存在:

 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());
 }

列出当前目录中所有文件(符号链接除外)的程序,按大小排序,最小的在前:

 #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;
 }

另请参见QFileInfo,QFile,QFileDialog,QCoreApplication :: applicationDirPath() 和“查找文件”示例。

公共类型

  1. enum Filter
    flags Filters
    此枚举描述QDir可用的筛选选项;例如,entryList()和entryInfoList()。过滤器的值是通过使用位或操作符组合下列列表中的值来指定的:

    ConstantValueDescription
    QDir::Dirs0x001列出与筛选器匹配的目录。
    QDir::AllDirs0x400列出所有目录;也就是说,不要对目录名应用过滤器。
    QDir::Files0x002文件列表。
    QDir::Drives0x004列出磁盘驱动器(在Unix下忽略)。
    QDir::NoSymLinks0x008不要列出符号链接(不支持符号链接的操作系统会忽略它)。
    QDir::NoDotAndDotDotNoDot | NoDotDot不要列出特殊条目“。”和“…”。
    QDir::NoDot0x2000不要列出特殊条目“。”。
    QDir::NoDotDot0x4000不要列出特殊条目"…"。
    QDir::AllEntriesDirs | Files |Drives列出目录、文件、驱动器和符号链接(除非指定系统,否则不会列出损坏的符号链接)。
    QDir::Readable0x010列出应用程序具有读访问权的文件。可读值需要与Dirs或文件结合使用。
    QDir::Writable0x020列出应用程序具有写访问权的文件。可写值需要与Dirs或文件结合使用。
    QDir::Executable0x040列出应用程序具有执行访问权限的文件。可执行值需要与Dirs或文件结合。
    QDir::Modified0x080仅列出已修改的文件(在Unix上忽略)。
    QDir::Hidden0x100列出隐藏文件(在Unix上,以"."开头的文件)。
    QDir::System0x200列出系统文件(在Unix上,包括FIFOs, socket和设备文件;在Windows中,包含。lnk文件)
    QDir::CaseSensitive0x800过滤器应该区分大小写。

    除非您设置NoSymLinks值,否则使用“筛选”枚举值来筛选文件和目录列表的函数将包括指向文件和目录的符号链接。
    默认构造的QDir不会基于文件的权限过滤掉文件,因此entryList() 和entryInfoList() 将返回所有可读,可写,可执行或这三者的任意组合的文件。这使默认值易于编写,同时又很有用。

    例如,设置“可读”,“可写”和“文件”标志允许列出应用程序对其具有读访问权,写访问权或两者兼有的所有文件。如果该组合中还包含Dirs and Drives标志,则可以列出所有驱动器,目录,应用程序可以读取,写入或执行的所有文件,以及指向此类文件/目录的符号链接。

    检索目录的权限,请使用entryInfoList() 函数获取关联的QFileInfo对象,然后使用QFileInfo :: permissons() 获取每个文件的权限和所有权。

  2. enum SortFlag
    flags SortFlags
    该枚举描述了QDir可用的排序选项,例如 用于entryList() 和entryInfoList() 。 通过对以下列表中的值进行或运算来指定排序值:

    ConstantValueDescription
    QDir::NoSort-1默认情况下不排序。
    QDir::Name0x00按名称排序。
    QDir::Time0x01按时间排序(修改时间)。
    QDir::Size0x02按文件大小排序。
    QDir::Unsorted0x03不排序。
    QDir::DirsFirst0x04首先放置目录,然后放置文件。
    QDir::Reversed0x08颠倒排序顺序。
    QDir::IgnoreCase0x10不区分大小写地排序。
    QDir::DirsLast0x20首先放置文件,然后放置目录。
    QDir::LocaleAware0x40使用当前的语言环境设置对项目进行适当排序。
    QDir::Type0x80按文件类型排序(扩展名)。

    只能指定Name、Time、Size、Type中的四个之一。

    如果同时指定DirsFirst和Reverseed,则目录仍放在第一位,但顺序相反; 文件将以相反的顺序在目录后列出。

公共函数

创建和析构

  1. QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
  2. QDir(const QString &path = QString())
  3. QDir(const QDir &dir)
  4. QDir & operator=(QDir &&other)
  5. QDir & operator=(const QDir &dir)
  6. void swap(QDir &other)
  7. ~QDir()

名称和路径

  1. QString dirName() const
  2. bool rename(const QString &oldName, const QString &newName)
  3. QString absoluteFilePath(const QString &fileName) const
  4. QString absolutePath() const
  5. QString canonicalPath() const
  6. QString filePath(const QString &fileName) const
  7. QString path() const
  8. void setPath(const QString &path)
  9. QString relativeFilePath(const QString &fileName) const

过滤器

  1. QDir::Filters filter() const
  2. void setFilter(QDir::Filters filters)
  3. QStringList nameFilters() const
  4. void setNameFilters(const QStringList &nameFilters)
  5. QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
  6. QFileInfoList entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
  7. QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
  8. QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
  9. QString operator[](int pos) const

属性

  1. bool isAbsolute() const
  2. bool makeAbsolute()
  3. bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const
  4. bool isReadable() const
  5. bool isRelative() const
  6. bool isRoot() const

目录操作

  1. bool cd(const QString &dirName)
  2. bool cdUp()
  3. uint count() const
  4. void refresh() const
  5. bool exists(const QString &name) const
  6. bool exists() const
  7. bool mkdir(const QString &dirName) const
  8. bool mkpath(const QString &dirPath) const
  9. bool remove(const QString &fileName)
  10. bool removeRecursively()
  11. bool rmdir(const QString &dirName) const
  12. bool rmpath(const QString &dirPath) const
  13. QDir::SortFlags sorting() const
  14. void setSorting(QDir::SortFlags sort)
  15. bool operator!=(const QDir &dir) const
  16. bool operator==(const QDir &dir) const

静态公共函数

搜索路径

  1. void addSearchPath(const QString &prefix, const QString &path)
  2. void setSearchPaths(const QString &prefix, const QStringList &searchPaths)
  3. QStringList searchPaths(const QString &prefix)

常用路径

  1. QString cleanPath(const QString &path)
  2. QDir current()
  3. bool setCurrent(const QString &path)
  4. QString currentPath()
  5. QDir home()
  6. QString homePath()
  7. QDir root()
  8. QString rootPath()
  9. QFileInfoList drives()
  10. QDir temp()
  11. QString tempPath()

分割符

  1. QString fromNativeSeparators(const QString &pathName)
  2. QChar separator()
  3. QChar listSeparator()
  4. QString toNativeSeparators(const QString &pathName)

相对或绝对路径

  1. bool isAbsolutePath(const QString &path)

  2. bool isRelativePath(const QString &path)

  3. bool match(const QString &filter, const QString &fileName)

  4. bool match(const QStringList &filters, const QString &fileName)

  1. void Q_CLEANUP_RESOURCE(name)
    卸载具有基本名称name的.qrc文件指定的资源。
    通常,Qt资源会在应用程序终止时自动卸载,但是如果资源位于正在卸载的插件中,请调用Q_CLEANUP_RESOURCE()强制删除资源。
    注意:此宏不能在名称空间中使用。 请参阅Q_INIT_RESOURCE文档以获取解决方法。
    例:

    Q_CLEANUP_RESOURCE(myapp);
    
  2. void Q_INIT_RESOURCE(name)
    使用指定的基本名称初始化.qrc文件指定的资源。 通常,将资源作为应用程序的一部分构建时,资源将在启动时自动加载。 在某些平台上,对于存储在静态库中的资源,必须使用Q_INIT_RESOURCE() 宏。

    例如,如果应用程序的资源列在名为myapp.qrc的文件中,则可以通过将以下行添加到main() 函数中来确保在启动时初始化资源:

    Q_INIT_RESOURCE(myapp);
    

    如果文件名包含的字符不能是有效C ++函数名的一部分(例如“-”),则必须用下划线字符(“ _”)代替。

    注意:此宏不能在名称空间中使用。 应该从main() 调用它。 如果这不可能,则可以使用以下解决方法从函数MyNamespace :: myFunction初始化资源myapp:

     inline void initMyResource() { Q_INIT_RESOURCE(myapp); }
    
     namespace MyNamespace
     {
         ...
    
         void myFunction()
         {
             initMyResource();
         }
     }
    
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值