之前讲读写文件的文章,有涉及部分QDir的使用,讲解感觉不够全面,特此增加一篇。
QDir
是 Qt 框架中用于操作文件和目录的类,它提供了跨平台的文件系统访问接口,可以进行目录遍历、文件查找、创建、删除、移动等操作。以下是对 QDir
的详细使用说明及其 C++ 代码示例:
QDir 的主要功能与方法
-
目录操作:
- 创建目录:
mkdir()
、mkpath()
创建单级或多级目录。 - 删除目录:
rmdir()
删除空目录,removeRecursively()
删除包含文件和子目录的非空目录。 - 重命名或移动目录:
rename()
。
- 创建目录:
-
目录信息获取:
- 当前目录:
currentPath()
获取当前工作目录,setCurrent()
设置当前工作目录。 - 目录属性:
exists()
、isReadable()
、isWritable()
、isAbsolute()
等方法检查目录的各种属性。 - 目录内容:
entryList()
、entryInfoList()
获取目录内文件和子目录列表,可设置过滤条件和排序方式。
- 当前目录:
-
文件操作(与
QFile
类似,但基于目录上下文):- 文件查找:
entryList()
、entryInfoList()
、findFiles()
、findChildren()
查找特定文件或子目录。 - 文件操作:
remove()
删除文件,rename()
重命名文件。
- 文件查找:
-
遍历目录:
- 迭代器:使用
QDirIterator
对目录进行深度优先或广度优先遍历。
- 迭代器:使用
QDir 使用 C++ 代码示例
#include <QDir>
#include <QFileInfo>
#include <QTextStream>
#include <QStandardPaths>
#include <QFile>
#include <QMessageBox>int main(int argc, char *argv[]) {// 示例1:获取并打印当前工作目录QDir currentDir = QDir::current();qDebug() << "Current directory: " << currentDir.path();// 示例2:创建多级目录QString newDirPath = "/path/to/new/directory";if (QDir().mkpath(newDirPath)) {qDebug() << "Directory created: " << newDirPath;} else {qDebug() << "Failed to create directory!";}// 示例3:列出指定目录下的所有文件和子目录(不递归)QDir dir("/path/to/some/directory");QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);foreach (const QString &entry, entries) {qDebug() << entry;}// 示例4:按大小排序列出目录下的所有文件,并显示详细信息QDir dirWithDetails("/path/to/some/directory");dirWithDetails.setSorting(QDir::Size | QDir::Reversed);QFileInfoList fileInfoList = dirWithDetails.entryInfoList(QDir::Files);foreach (const QFileInfo &info, fileInfoList) {qDebug() << "Name: " << info.fileName();qDebug() << "Size: " << info.size();qDebug() << "IsDir: " << info.isDir();qDebug() << "Last modified: " << info.lastModified().toString();qDebug() << "";}// 示例5:在用户文档目录下创建一个新文件并写入文本QString userDocsPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);QFile newFile(userDocsPath + "/example.txt");if (newFile.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&newFile);out << "This is an example text written to a file in the Documents folder.";newFile.close();QMessageBox::information(nullptr, "File Created", "Example file was successfully created.");} else {QMessageBox::critical(nullptr, "Error", "Failed to create or write to the example file.");}return 0;
}
以上代码示例包含了以下几个 QDir
使用场景:
- 获取并打印当前工作目录。
- 创建多级目录。
- 列出指定目录下的所有文件和子目录(不递归)。
- 按大小排序列出目录下的所有文件,并显示详细信息。
- 在用户文档目录下创建一个新文件并写入文本。
这些示例涵盖了 QDir
类的基本操作,包括目录创建、查询、文件操作等。在实际项目中,您可以根据具体需求灵活运用 QDir
提供的各种方法进行文件系统操作。如果需要更复杂的功能,如深度优先或广度优先遍历目录树,可以结合使用 QDirIterator
类。