Qt:QDir类

说明

QDir提供了访问目录目录下内容的类。

QDir既可以用于访问文件系统,也可以用于访问Qt 资源系统(Qt's resource system.)。

Qt用 "/" 作为目录分隔符,此外,"/" 也是URL的路径分隔符。

QDir可以指向一个用相对路径绝对路径指明的文件。绝对路径在不同系统下不同,Linux系统下,以文件分隔符"/"开始,如:"/home/user/Documents";在Windows系统下,以某个磁盘开始,如:"C:/Documents and Settings"。相对路径直接以目录名、文件名开头,指明一个相对于当前目录的路径,如:"images/landscape.png"。

我们可以用isRelative()isAbsolute()来检查一个QDir是绝对还是相对的。调用makeAbsolute()可以将一个相对路径的QDir转换为绝对路径的QDir。

规范化路径:不含".."、"."、逻辑链接的路径(把这些简写的路径写全),绝对路径与相对路径中都可以含有这些路径。

逻辑链接:Linux系统中路径中的local代表根目录,如果根目录为usr,规范化路径中的local就会变成usr。1)导航与目录操作

1)导航与目录操作

①路径

目录路径可以通过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()移除。

③检查

通过exists()检查某个目录是否存在;目录的属性可以通过 isReadable(), isAbsolute(), isRelative(), 和 isRoot() 进行检查。

④重读某目录:refresh()

2)文件与目录的内容

①路径上的要素

目录路径上有一系列的要素:文件、目录、符号链接。要素的数量通过count()得到,它们的名字通过entryList()保存在一个QStringList中,如果我们需要每个要素的信息,可以通过entryInfoList()来获取一个QList

②构造路径、移除

通过filePath()、absoluteFilePath()构造一个从QDir指定的目录到某个文件、目录绝对路径相对路径。不过它们都不会检查该路径是否存在,它们仅仅用于构造路径

QDir directory("Documents/Letters");
QString path = directory.filePath("contents.txt");
QString absolutePath = directory.absoluteFilePath("contents.txt");

通过remove()移除文件,通过rmdir()移除目录

③filter

在用entryList()entryInfoList()获取要素时,可以引入过滤器来筛选符合要求的要素:例如筛选包含某子串的文件、分离文件与目录等:

名字filter通过QStringList传入setNameFilters()进行构建;

属性filter通过多个用OR连接的Filter进行构建,方法是setFilter()

排序顺序setSorting()传入的一系列用OR(即 | )连接的SortFlags构建。

可以通过match()来检查某个文件名是否符合filter

3)当前目录与其他路径

两类static方法用于获取路径,一类返回QDir,一类返回QString

QDir

QString

Return Value

current()

currentPath()


The application's working directory

home()

homePath()

The user's home directory

root()

rootPath()

The root directory

temp()

tempPath()

The system's temporary directory

可以用setCurrent()来设置程序的工作目录。如果我们想知道应用的可执行文件所在的目录,可以用QCoreApplication::applicationDirPath()。

drives()方法给出了该文件系统的所有根目录构成的List。在Unix系统中,返回一个包含单个"/"的List,它就是系统根目录。在Windows系统下,它会返回包含系统所有盘的QList

4)路径操作与字符串

Path中如果包含元素 ".",说明是当前目录;包含"..",说明是parent目录;包含逻辑链接说明是规范目录,规范目录通过canonicalPath()构建。

通过cleanPath()可以简化path,移除path中多余的"/"".."

有时我们需要构造一些自制分隔符的路径,可以用toNativeSeparators()

5)例子

①检查目录是否存在:exists()

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

列出当前目录下的所有文件,按文件size从小到大排列:

#include 
#include 

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

1、模块和加载项

Header:

#include

qmake:

QT += core

2、构造

QDir(QString path, QString nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

用path构造QDir,nameFilter指定过滤的元素

QDir(QString path = QString())

构造QDir指向path,如果path为空,则程序工作目录"."会被使用

QDir(QDir dir)

另一个QDir的副本

3、静态字段

enum

Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive }

用于entryList() 和entryInfoList()中,描述了筛选选项。

flags

Filters

enum

SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware }

用于entryList() 和entryInfoList()中的排序,按照 名字、大小、时间 等等排序

flags

SortFlags

4、静态方法

返回值类型

方法

说明

void

addSearchPath(QString prefix, QString path)

为path加前缀prefix

QString

cleanPath(QString path)

移除path中冗余的分隔符,"."和".."

QDir

current()

当前目录对应的QDir

QString

currentPath()

当前目录的绝对路径

QFileInfoList

drives()

系统根目录的list

QString

fromNativeSeparators(QString pathName)

用指定分隔符进行路径分割,默认用"/"


QDir

home()

home目录

QString

homePath()

home目录的路径

bool

isAbsolutePath(QString path)

是否为绝对路径

bool

isRelativePath(QString path)

是否为相对路径

QChar

listSeparator()

path分隔符:

Unix下是":"

Windows下是";"

bool

match(QString filter, QString fileName)

match(QStringList filters, QString fileName)

检查fileName是否符合filter的规则

QDir

root()

根目录QDir

QString

rootPath()

根目录路径

QStringList

searchPaths(QString prefix)

prefix的检索目录

QChar

separator()

目录分隔符:Unix中是"/";Windows中是""

bool

setCurrent(QString path)

设置当前工作目录

void

setSearchPaths(QString prefix, QStringList searchPaths)

给搜索路径searchPaths加前缀prefix

QDir

temp()

返回系统的临时目录QDir

QString

tempPath()

临时目录路径

QString

toNativeSeparators(QString pathName)

将pathName中的"/"分隔符转换系统分隔符,返回转换后的路径

5、实例方法


展开阅读全文

页面更新:2024-05-10

标签:根目录   路径   要素   逻辑   绝对路径   链接   文件   目录   方法   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top