目录
Qt 获取文件夹中的文件夹名字
QDir类的学习和使用 (***)
---------------------------------------------------------------
摘要:
文件和目录内容
目录下包含许多内容,里面有文件、目录和符号链接(linux的术语,类似Windows下的快捷方式)。
count()函数返回目录中的条目数总数。
而 entryList()函数是获取目录中所有项的名称的字符串列表。
如果要得到有关每个条目的信息,请使用 entryInfoList()函数得到一个QFileInfo对象的列表。
uint | QDir::count() const | 返回的是该目录下文件的个数,只是这个对象的子目录,这个同样可以用在 entryList().count, |
---|---|---|
QStringList | entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 不带参就返回所有的内容,这个带参使用的更好,可以通过设置参数来选择过滤项和排序功能,他有两个重载函数, |
QFileInfoList | entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 返回一个以 QFileInfo 对象形式存在的列表,根据先前使用 setname filters()和setFilter()设置的名称和属性筛选器排序,并根据使用setSorting()设置的标志排序。 可以使用name filters、filters和sort参数重写名称筛选器、文件属性筛选器和排序规范。则返回空列表。 |
1 | QDir two("C:/Users/Administrator/Desktop"); |
QFileInfoList 比 entryList 包含了更多的信息。
更多的信息,就意味着需要占用更大的内存。
测试的输出结果:
QDir tempDir("C:/abcDir/defDir");
qDebug()<<"tempDir.Name" << tempDir.dirName();
QStringList names = tempDir.entryList(QDir::Dirs);
qDebug()<<"names" << names;
qDebug()<<"entryList : === " <<tempDir.entryList(); //获得:文件夹名、或文件名。
qDebug()<<"entryInfoList : === " <<tempDir.entryInfoList(); //获得:QFileInfo
entryList: names (".", "..", "axDirOrFile", "bxDirOrFile",
entryInfoList() : entryInfoList : === (QFileInfo(C:\abcDir\defDir\.), QFileInfo(C:\abcDir\defDir\..),....
====================================
Qt 获取文件夹中的文件夹名字
环境
VS2015 qt5.9.7 64位
包含的头文件
1 #include <QDir>
2 #include <QDebug>
3 #include <QMessageBox>
代码
//--1 判断文件夹是否存在
QString folderPath = "H:\\Pro";
QDir dir(folderPath);
if(!dir.exists())
{
QMessageBox::critical(this,tr("错误"),tr("文件夹找不到"));
return;
}//--2 获取当前路径下所有的文件夹名字
QStringList names = dir.entryList(QDir::Dirs);//--3 删除当前文件夹和上级文件夹(温馨提示:隐藏的文件夹获取不了)
names.removeOne(".");
names.removeOne("..");//--4 打印出获取的文件名
qDebug() << "names: " << names;
https://www.cnblogs.com/ybqjymy/p/13632898.html
QDir类的学习和使用 (***)
https://www.codenong.com/cs106478069/
文章目录
- Qt5的QDir类的学习
- 概述:
- 相对路径与绝对路径
- 相对性判断
- 存在性判断
- 相对路径转绝对路径
- 导航和路径操作
- 获取和设置QDir的值
- 切换路径
- 新建删除重命名文件夹
- 文件和目录内容
- 过滤文件内容
- 文件路径添加和删除
- 当前目录和其他特殊路径
- 当前目录
- 特殊路径
- 路径操作和字符串
- 附录
- 文件属性标志
- 文件排序标志
- 相对路径与绝对路径
- 概述:
概述:
? QDir是可以访问 目录结构和目录结构里内容,主要是对目录,但不是对目录里的文件内容的具体信息的操作。为了通俗来学习,我更愿意使用 ‘路径’ 把目录这些词语替换了,QDir是对文件路径的操作的一个类,操作嘛!就像数据库类似!
增删改查,更简单就是说,就是两种操作:读写;对 ‘路径’ 这个对象进行一些 读取、写入操作。
读 | 1.访问文件路径、2.访问文件路径下的文件信息、3、可以访问底层文件系统、4、访问Qt的资源系统 |
---|---|
写 | QDir可以创建、删除、重命名文件夹、删除文件等 |
Qt全都是使用 “/” (注意区别"\")作为通用目录分隔符,就像在url中使用“/”作为路径分隔符一样。一般我们在Qt上面都是使用的“/”, Windows上面一般都是使用的“\”,
我们其实不用管这些转换问题,Qt将自动转换路径以符合底层操作系统。
相对路径与绝对路径
QDir可以使用相对路径或绝对路径指向文件。
绝对路径以目录分隔符(“/”)开头(在Windows下要前面加上盘符)。
相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
1 | //使用相对路径 QDir("./zhy/seting");
|
相对性判断
我们可以使用以下的函数来确定这个路径的相对性,返回值当然是bool值,看一下这个函数的名字就可以猜出来,
后面的 const是说这个函数不能去、也不要去修改,其保护作用的声明。
bool | isAbsolute() const |
---|---|
bool | isRelative() const |
1 | QDir one("Users/Administrator"); |
存在性判断
在不同的操作系统下这个是会判断路径的相对性的,就算你在windows下使用Linux的绝对路径,这个isAbsolute() 返回的值还是false,
当然哈,这个函数不会去判断这个路径的真实性,就算你瞎写的只要符合规则,这都会给你返回值,判断你给的路径是否存在是用的另外一个函数
bool | exists(const QString &name) const | 一般用于给定一个路径 name 来判断,不用再去定义一个对象来判断 |
---|---|---|
bool | exists() const | 一般是对以初始化(带参构造)QDir对象判断 |
1 | QDir one("Users/Administrator"); //瞎编的路径、不是当前程序运行的路径 |
相对路径转绝对路径
bool | makeAbsolute() |
---|---|
把相对路径转换为绝对路径,成功则返回true否则返回false |
导航和路径操作
获取和设置QDir的值
我们可以使用path()函数获取QDir对象的路径,使用setPath()函数给这个QDir对象设置新路径,说白了就是,我们可以通过上面的函数来设置QDir(“xxxx”)里面的xxxx。我们还可以使用absolutePath()获取到这个对象的绝对路径,获取到绝对路径
QString | absolutePath() const | 返回这个路径,路径不存在就返回当前程序路径,最好不要用’.’ ‘…’ |
---|---|---|
QString | path() const | 直接返回对象的路径, |
void | setPath(const QString &path) | 设置指定的路径 |
1 | QDir one("Users/Administrator"); |
使用dirName()函数可以找到目录的名字。这通常返回绝对路径中指定目录位置的最后一个文件夹的名称。但是,如果QDir表示当前目录,它就可以返回“.”
声明 | 用法例子 | 结果 |
---|---|---|
QString QDir::dirName() const | QDir(“Documents/Letters/Applications”).dirName() | // “Applications” |
QDir().dirName() | // “.” |
切换路径
想要切换路径 可以使用 cd() 和 cdUp() 函数更改目录的路径,这两个函数的操作方式与熟悉的shell命令类似。当使用现有目录的名称调用cd()时,QDir对象将更改路径值,其内容也会改变。cdUp() 函数的作用是:更改QDir对象的路径到其父目录;也就是说 cd(“…”)等同于 cdUp()。
bool | cd(const QString &dirName) | 切换到dirName对应的目录,改变的是这个QDir.path()的值 |
---|---|---|
bool | cdUp() | 和cd("…")一样,切换到父目录 |
1 | QDir two("C:/Users/Administrator/Desktop"); |
新建删除重命名文件夹
现在终于可以 ‘写’目录了,我们可以用mkdir()创建一个子目录,用rename()重命名,用rmdir()删除目录。
返回值就是判断成功与否的,不对的情况说明传入的参数是有误的,也就是说给定的路径有问题
bool | mkdir(const QString &dirName) const | 根据这个dirName来创建一个子目录, |
---|---|---|
bool | rename(const QString &oldName, const QString &newName) | 给老名字一个新名字就是可以了 |
bool | rmdir(const QString &dirName) const | 指定要移除的目录 |
1 | //不管这个Dir对象声明没有,都可以做这些操作,都有这些功能,带不带参,都没有影响 |
还可以并且可以使用isReadable()和isRoot()测试目录的属性。
bool | isReadable() const | 如果目录可读并且可以按名称打开文件,则返回true;否则返回false。 |
---|---|---|
bool | isRoot() const | 如果目录是根目录,则返回true;否则返回false。Windows就是盘符,Linux就是’/’ |
1 | QDir two("C:/Users/Administrator/Desktop"); |
refresh() 函数的作用是:从磁盘上重新读取目录的数据。这样更安全一点
文件和目录内容
目录下包含许多内容,里面有文件、目录和符号链接(linux的术语,类似Windows下的快捷方式)。
count()函数返回目录中的条目数总数。
而 entryList()函数是获取目录中所有项的名称的字符串列表。
如果要得到有关每个条目的信息,请使用 entryInfoList()函数得到一个QFileInfo对象的列表。
uint | QDir::count() const | 返回的是该目录下文件的个数,只是这个对象的子目录,这个同样可以用在 entryList().count, |
---|---|---|
QStringList | entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 不带参就返回所有的内容,这个带参使用的更好,可以通过设置参数来选择过滤项和排序功能,他有两个重载函数, |
QFileInfoList | entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 返回一个以 QFileInfo对象形式存在的列表,根据先前使用 setname filters()和setFilter()设置的名称和属性筛选器排序,并根据使用setSorting()设置的标志排序。 可以使用name filters、filters和sort参数重写名称筛选器、文件属性筛选器和排序规范。则返回空列表。 |
1 | QDir two("C:/Users/Administrator/Desktop"); |
过滤文件内容
真正的重点是设置这些参数,那样就可以有选择性的返回我们需要的值
我们可以应用名称过滤器来指定一个模式,该模式包含文件名需要匹配的通配符、一个属性过滤器,该属性过滤器选择条目的属性并可以区分文件、目录、以及排序顺序。
名称过滤器是传递给setNameFilters()的字符串列表。属性过滤器由按位或组合的过滤器组成,这些过滤器在调用setFilter()时指定。排序顺序是使用setSorting()和SortFlags的按位或组合指定的。
可以使用match()函数测试文件名是否与筛选器匹配。调用entryList()和entryInfoList()时,还可以指定筛选器和排序顺序标志,以便覆盖以前定义的行为。
void | setNameFilters(const QStringList &nameFilters) | 这个nameFilters里面的单个成员是可以使用通配符的,那就非常的灵活的,就像这种 "snn.", ".cpp"等等,这个主要过滤文件的类型 |
---|---|---|
void | setFilter(QDir::Filters filters) | 这个参数是需要查表来设置的,主要来过滤一下目录下文件的属性,隐藏文件夹啊、可执行文件啊、驱动啊、是普通文件还是目录文件等等,要用 ‘|’运算来设置 |
void | setSorting(QDir::SortFlags sort) | 看名字,顾名思义,就是过滤文件排序的属性,也是要查表的,像这些按名称、按时间、按类型、按文件大小等等也是用’|'运算来的 |
bool | match(const QString &filter, const QString &fileName) |
这几个函数比较重要我分开记录一下,查看附录可以去查看这些标志的意思
setNameFilters(const QStringList &nameFilters)
1 | //1、一种方法 这是在entryList()里面带参构造的 |
setFilter(QDir::Filters filters) 和 setFilter(QDir::Filters filters),因为entryInfoList和entryList()差不多,我就只用entryList()函数
1 | //setSorting()函数, |
同样的我们可以在一开始的时候就初始化好entryList()函数,可以参考一下以下的例子
1 | /*这个程序会列出当前文件夹下的所有文件、包括符号链接文件*/ |
文件路径添加和删除
我们可以使用filePath()和absoluteFilePath()构造目录下的 文件和目录的路径。啥意思?意思就是说这些个函数啊,它们的返回值是相对于QDir对象路径的指定文件或目录的路径;
absoluteFilePath()返回指定文件或目录的绝对路径。
这些函数都不检查文件或目录的存在;它们只负责构造这样一个文件路径。这点要注意哈!
QString | filePath(const QString &fileName) const | 其实只是返回的一个新的路径,有点类似字符串里的重载运算符 + ,拼接俩字符串形成一个新的字符串返回 |
---|---|---|
QString | absoluteFilePath(const QString &fileName) const | 和filePath()类似,只是返回的是绝对路径,上面的可以是相对路径或绝对路径 |
bool | remove(const QString&fileName) | 这个和这个可以形成对比,这个是从目录中删除文件,是真的删除,可以联系到上面的删除目录是使用的 rmdir("");函数 |
1 | QDir two("C:/Users/Administrator/Desktop"); |
当前目录和其他特殊路径
当前目录
对一些常见目录的访问提供了许多静态函数,下面这些函数返回QDir对象。这些函数也有相应的函数返回字符串:
返回值是:QDir | 返回值是:QString | QDir的一个部分是QString |
---|---|---|
current() | currentPath() | 返回当前的目录路径 |
home() | homePath() | 返回当前用户的所在目录 |
root() | rootPath() | linux返回‘/’,windows则是返回“C:/” |
temp() | tempPath() | 返回用户的临时目录 |
关于这个两个的关系:QDir构造的对象是已经初始化的对象,后面是任何QDir对象都可以使用的,而且获取的值都是一样的
1 | QDir one; |
特殊路径
setCurrent() 静态函数是常用于设置软件程序的工作路径的,如果你想找到这个可执行程序的路径,你可以使用这个函数 QCoreApplication::applicationDirPath(),drives()静态函数为包含文件系统的每个设备提供根目录列表。在Unix系统上,这将返回一个包含单个根目录“/”的列表;在Windows系统上,该列表通常包含C:/,可能还包含其他驱动器号,如D:/,具体取决于用户系统的配置。
bool | setCurrent(const QString &path) | 将应用程序的当前工作目录设置为路径。如果成功更改目录,则返回true;否则返回false |
---|---|---|
QString | QCoreApplication::applicationDirPath() | 注意是返回的当前运行程序的目录路径,不是Qt的安装路径,也不是这可执行文件的具体路径 |
QFileInfoList | drives() | 其实就是返回这个磁盘驱动器的,Windows返回所有的盘符,像“C: / ”,“D: /”,等等,但是在Linux是一个唯一的根目录“ / ” |
1 | QDir one; |
路径操作和字符串
这部分我也不太明白
使用canonical path()函数,可以将包含“.”元素(在路径中的该点引用当前目录)、“…”元素(引用父目录)和符号链接的路径缩减为规范形式。
还可以通过使用cleanPath()删除多余的“/”和“…”元素来简化路径。有时需要能够在用户平台的本机表示中显示路径。
函数的作用是:返回一个指定路径的副本,在该路径中,每个目录分隔符都将替换为基础操作系统的相应分隔符。
cleanPath()返回标准化目录分隔符(转换为“/”)并删除多余分隔符的路径,并尽可能解析“.s”和“…s”。保留符号链接。此函数不返回规范路径,而是返回输入的最简单版本。例如,“./local”变为“local”,“local/./bin”变为“bin”和“/local/usr/./bin”变为“/local/bin”
附录
文件属性标志
QDir::Dirs | 0x001 | List directories that match the filters. |
---|---|---|
QDir::AllDirs | 0x400 | List all directories; i.e. don’t apply the filters to directory names. |
QDir::Files | 0x002 | List files. |
QDir::Drives | 0x004 | List disk drives (ignored under Unix). |
QDir::NoSymLinks | 0x008 | Do not list symbolic links (ignored by operating systems that don’t support symbolic links). |
QDir::NoDotAndDotDot | NoDot | NoDotDot | Do not list the special entries “.” and “…”. |
QDir::NoDot | 0x2000 | Do not list the special entry “.”. |
QDir::NoDotDot | 0x4000 | Do not list the special entry “…”. |
QDir::AllEntries | Dirs | Files | Drives | List directories, files, drives and symlinks (this does not list broken symlinks unless you specify System). |
QDir::Readable | 0x010 | List files for which the application has read access. The Readable value needs to be combined with Dirs or Files. |
QDir::Writable | 0x020 | List files for which the application has write access. The Writable value needs to be combined with Dirs or Files. |
QDir::Executable | 0x040 | List files for which the application has execute access. The Executable value needs to be combined with Dirs or Files. |
QDir::Modified | 0x080 | Only list files that have been modified (ignored on Unix). |
QDir::Hidden | 0x100 | List hidden files (on Unix, files starting with a “.”). |
QDir::System | 0x200 | List system files (on Unix, FIFOs, sockets and device files are included; on Windows, .lnk files are included) |
QDir::CaseSensitive | 0x800 | The filter should be case sensitive. |
文件排序标志
QDir::Name | 0x00 | Sort by name. |
---|---|---|
QDir::Time | 0x01 | Sort by time (modification time). |
QDir::Size | 0x02 | Sort by file size. |
QDir::Type | 0x80 | Sort by file type (extension). |
QDir::Unsorted | 0x03 | Do not sort. |
QDir::NoSort | -1 | Not sorted by default. |
QDir::DirsFirst | 0x04 | Put the directories first, then the files. |
QDir::DirsLast | 0x20 | Put the files first, then the directories. |
QDir::Reversed | 0x08 | Reverse the sort order. |
QDir::IgnoreCase | 0x10 | Sort case-insensitively |
QDir::LocaleAware | 0x40 | Sort items appropriately using the current locale settings. |