1、概述
QDir是Qt框架中的一个核心类,它提供了对文件系统目录的操作接口。Qt是一个跨平台的应用程序开发框架,广泛用于开发桌面、移动和嵌入式设备上的应用程序。QDir类使得开发者能够方便地在不同操作系统上处理目录和文件,如进行目录遍历、文件查找、创建、删除、移动等操作。
2、重要方法
QDir类提供了多种方法来操作目录和文件,以下是一些重要的方法:
-
目录操作:
mkdir()
/mkpath()
:创建单级或多级目录。rmdir()
:删除空目录。removeRecursively()
:删除包含文件和子目录的非空目录。rename()
:重命名或移动目录。exists()
:检查目录是否存在。isReadable()
/isWritable()
/isAbsolute()
:检查目录的各种属性。
-
文件操作:
entryList()
/entryInfoList()
:获取目录内文件和子目录列表,可设置过滤条件和排序方式。findFiles()
/findChildren()
:查找特定文件或子目录。remove()
:删除文件。rename()
:重命名文件。
-
路径处理:
currentPath()
:获取当前工作目录。setCurrent()
:设置当前工作目录。absolutePath()
:返回绝对路径。canonicalPath()
:返回规范化路径。dirName()
:获取当前目录名。setPath()
:设置QDir对象的路径。path()
:获取QDir对象的路径。
-
过滤和排序:
setNameFilters()
:设置文件名过滤规则。setSorting()
:设置排序方式。
-
链接和符号链接:
isSymLink()
:检查是否为符号链接。symLinkTarget()
:获取符号链接的目标路径。
3、重要信号
关于QDir类的重要信号,需要注意的是,QDir本身并不直接发出信号。然而,在Qt框架中,与文件和目录操作相关的类(如QFileSystemWatcher)可以发出信号来监控文件和目录的变化。例如,QFileSystemWatcher可以监控指定目录和文件的状态,当目录或文件发生改变时(如内容变化、重命名、删除等),将触发相应的信号。开发者可以通过信号与槽的机制捕获这些信号并作出反应。
但请注意,由于QDir本身不直接发出信号,因此在此部分中无法列出QDir的特定信号。如果需要监控文件和目录的变化,请考虑使用QFileSystemWatcher等类。
#include <QDir>
#include <QFileInfo>
#include <QTextStream>
#include <QStandardPaths>
#include <QFile>
#include <QDebug> int main(int argc, char *argv[]) { // 获取并打印当前工作目录 QDir currentDir = QDir::current(); qDebug() << "Current directory: " << currentDir.path(); // 创建多级目录 QString newDirPath = "/path/to/new/directory"; if (QDir().mkpath(newDirPath)) { qDebug() << "Directory created: " << newDirPath; } else { qDebug() << "Failed to create directory!"; } // 列出指定目录下的所有文件和子目录(不递归) QDir dir("/path/to/some/directory"); QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); for (const QString &entry : entries) { qDebug() << entry; } // 按大小排序列出目录下的所有文件,并显示详细信息 QDir dirWithDetails("/path/to/some/directory"); dirWithDetails.setSorting(QDir::Size | QDir::Reversed); QFileInfoList fileInfoList = dirWithDetails.entryInfoList(QDir::Files); for (const QFileInfo &info : fileInfoList) { qDebug() << "Name: " << info.fileName(); qDebug() << "Size: " << info.size(); qDebug() << "IsDir: " << info.isDir(); qDebug() << "Last modified: " << info.lastModified().toString(); qDebug() << ""; } return 0;
}
觉得有帮助的话,打赏一下呗。。