StupidBeauty
Read times:4022Posted at: - no title specified

Qt5.7文档翻译:QDir类,QDir Class

QDir 类,使得妳能够访问到文件系统目录的结构及它们的内容。 详细说明……

头文件:

#include <QDir>

qmake指令:

QT += core

注意: 这个类中的所有函数都是 可重入的

详细说明

QDir 类,使得妳能够访问到文件系统目录的结构及它们的内容。

QDir ,可用来操作路径名,访问路径和文件相关的信息,以及操作底层的文件系统。还可以用来访问Qt的 资源系统

Qt使用"/"作为统一的目录分隔符,这与URL中的路径分隔符"/"一致。如果妳固定地使用"/"作为目录分隔符,那么,Qt会为妳做好路径的转换工作,以满足底层操作系统的要求。

QDir 可使用相对路径或绝对路径来指向某个文件。绝对路径,以目录分隔符开头。相对文件名,以目录名或文件名开头,其指定的是相对于当前目录的路径。

绝对路径示例:

QDir ("/home/user/Documents")

相对路径示例:

QDir ("images/landscape.png")

妳可使用 isRelative ()或 isAbsolute ()函数来检查,某个 QDir 是在使用相对文件路径还是绝对文件路径。调用 makeAbsolute ()即可将相对路径的 QDir 转换成使用绝对路径。

路径导航及目录操作

目录的路径,可通过 path ()函数来获取,并且可通过 setPath ()函数来设置一个新的路径。通过调用 absolutePath ()即可得知目录的绝对路径。

目录的名字,可使用 dirName ()函数来获取。这个函数,一般返回的是,该目录所在的绝对路径的最后一个元素。但是,如果该 QDir 表示的是当前目录的话,它也可能返回"."。

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

QDir ().dirName()                                 // "."

目录的路径,也可以通过 cd ()和 cdUp ()函数来改变,它们的行为,与对应的外壳(shell)命令类似。当调用 cd ()并且指定某个确实存在的目录时,该 QDir 对象会改变自己的目录,以表示新指定的目录。 cdUp ()函数,会改变该 QDir 的目录,使得它引用到其亲代(parent)目录;也就是说,cd("..")等价于 cdUp ()。

目录,可使用 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 对象指定过滤器,以减少 entryList ()和 entryInfoList ()返回的条目的个数。妳可使用文件名过滤器来指定一个通配符,文件名必须匹配该通配符才会被列出。还可使用属性过滤器,指定条目必须符合的属性。还可区分文件和目录。还可指定排序规则。

文件名过滤器,是由多个字符串组成的多个列表,可使用 setNameFilters ()来指定。属性过滤器,由多个Filters 的逻辑或(bitwise OR)组合组成,可使用 setFilter ()来指定。排序规则,由多个 SortFlags 的逻辑或组合组成,可使用 setSorting ()来指定。

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

还可以在调用 entryList ()和 entryInfoList ()时指定过滤器和排序规则标志位,以覆盖之前定义好的行为。

当前目录及其它特殊路径

有一系列的静态函数,作用是让妳能够方便地访问到某些常用目录,它们返回的是 QDir 对象。同时,这些函数,也有对应的返回字符串的版本:

QDir

QString

返回值

current ()

currentPath ()

应用程序当前的工作目录

home ()

homePath ()

当前用户的家目录

root ()

rootPath ()

根目录

temp ()

tempPath ()

系统的临时目录

setCurrent ()静态函数,也可用来设置应用程序的工作目录。

如果妳想获取到本应用程序可执行文件所在的目录,则参考 QCoreApplication::applicationDirPath ()。

路径操作及字符串

路径中包含的"."元素,表示的是,路径中该位置处的当前目录。".."元素,表示的是,其亲代目录。符号链接,可通过 canonicalPath ()函数来解析成其实际路径。

对于路径,还可以调用 cleanPath (),以对其进行简化,具体效果就是,删除其中多余的"/"和".."元素。

示例

检查某个目录是否存在:

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 ()和 文件查找示例

成员类型文档

enum QDir::Filter
flags QDir::Filters

这個枚举描述的是可用于 QDir 的过滤选项;例如用于 entryList ()和 entryInfoList ()。过滤器的值是由以下列表中的値进行按位 (OR)操作得到的:

常量

描述

QDir::Dirs

0x001

列出符合过滤器条件的目录。

QDir::AllDirs

0x400

列出所有目录;也就是说,不要对目录名字使用过滤器。

QDir::Files

0x002

列出文件。

QDir::NoSymLinks

0x008

不要列出符号链接(在不支持符号链接的操作系统中被无视)。

QDir::NoDotAndDotDot

NoDot | NoDotDot

不要列出特殊条目"."和".."。

QDir::NoDot

0x2000

不要列出特殊条目"."。

QDir::NoDotDot

0x4000

不要列出特殊条目".."。

QDir::AllEntries

Dirs | Files | Drives

列出目录、文件、驱动器和符号链接(除非妳指定System,否则不會列出失效的(broken)符号链接)。

QDir::Readable

0x010

列出此程序有权读取的文件。这個Readable 値需要与Dirs 或Files 组合。

QDir::Writable

0x020

列出此程序有权写入的文件。这個Writable 値需要与Dirs 或Files 组合。

QDir::Executable

0x040

列出此程序有权执行的文件。这個Executable 値需要与Dirs 或Files 组合。

QDir::Hidden

0x100

列出隐藏文件(在Unix 中指的是文件名以"."开头的文件)。

QDir::System

0x200

列出系统文件(在Unix 中,先进先出管道(FIFOs)、套接字和设备文件都包含在其中)

QDir::CaseSensitive

0x800

过滤器是大小写敏感的。

那些使用Filter 枚举値来过滤文件和目录的列表的函数,也會将链接到文件和目录的符号链接包含在其中,除非妳设置咯NoSymLinks 值。

默认构造的 QDir 不會按照权限来过滤文件,所以 entryList ()和 entryInfoList ()會返回所有具有可读、可写、可执行或这三者的任意组合的权限的文件。这就使得默认的过滤器既好写又好用。

比如,设置 Readable Writable Files 标志的话,會列出此程序对其拥有读取权限、写入权限或同时拥有两个权限的所有文件。如果 Dirs Drives 标志也被包含在其中的话,那么此程序对其拥有读取、写入或执行权限的所有驱动器、目录、文件以及指向这些文件/目录的符号链接都會被列出。

要获取某個目录的权限情况的话,则使用 entryInfoList ()函数来获取相关的 QFileInfo 对象,然后使用QFileInfo::permissons()来获取每個文件的权限情况和所有者信息。

Filters类型是 QFlags <Filter>的类型定义(typedef)。它储存的是一些Filter 値的逻辑或(OR)组合。

成员函数文档

bool  QDir:: mkdir (const  QString  & dirName ) const

创建一个名为dirName的子目录。

成功则返回真( true );否则返回假( false )。

如果在调用这个函数时对应的子目录已经存在,则返回假。

参考 rmdir ()。

bool  QDir:: mkpath (const  QString  & dirPath ) const

创建一整个目录路径dirPath

这个函数,会在必要的情况下创建所有的亲代目录,以便最终创建所需要的子目录。

成功则返回真( true );否则返回假( false )。

如果在调用这个函数时对应的路径已经存在,则返回真。

参考 rmpath ()。

bool  QDir:: remove (const  QString  & fileName )

删除名为fileName的文件。

如果该文件被成功删除,则返回真( true );否则返回假( false )。

bool QDir::removeRecursively()

删除该目录,以及其中的所有内容。

删除成功则返回真( true ),否则返回假(false)。

如果某个文件或子目录无法被删除,那么,removeRecursively()会继续工作,尝试删除尽可能多的文件和子目录,然后返回假。

如果该目录已经被删除,那么此方法会返回真(预期结果已经达到)。

注意:这个函数被设计用于删除应用程序内部的某个小目录(例如某个临时目录),但不应当用来删除用户可见的目录。对于用户可见的目录进行操作,我们的建议是,向用户报告详细的错误信息,对于出错的情况提供解决方法,在删除过程中显示进度条,因为这个过程可能会需要数分钟。

这个函数是从Qt 5.0 开始引入的。

bool  QDir:: rmdir (const  QString  & dirName ) const

删除名为dirName的目录。

该目录必须为空,rmdir()才会执行成功。

删除成功则返回真( true ),否则返回假(false)。

参考 mkdir ()。

bool  QDir:: rmpath (const  QString  & dirPath ) const

删除整个目录路径dirPath

这个函数,会删除dirPath中所有处于空白状态的亲代目录。它与mkpath(dirPath)的作用相反。

删除成功则返回真( true ),否则返回假(false)。

参考 mkpath ()。

void  QDir:: setFilter ( Filters filters )

entryList ()和  entryInfoList ()所使用的过滤器设置为 filters 。过滤器的作用是,指定,哪些文件会被 entryList () 和 entryInfoList ()所返回。参考 QDir::Filter

参考 filter ()和 setNameFilters ()。

[static] QDir  QDir:: temp ()

返回系统的临时目录。

该目录会使用临时目录的绝对路径来构造,以确保它的 path ()会与 absolutePath ()一致。

参考 tempPath ()以了解详细信息。

参考 drives ()、 current ()、 home ()和 root ()。

[static] QString  QDir:: tempPath ()

返回系统的临时目录的绝对路径。

在Unix/Linux系统中,所返回的是 TMPDIR 环境变量中指定的路径,如果未定义 TMPDIR ,那么返回的是 /tmp 。此方法返回的路径,不会以目录分隔符结尾,除非它本身就是根目录。

参考 temp ()、 currentPath ()、 homePath ()和 rootPath ()。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands