QT基础 - 文件目录操作

2024-06-22 08:52
文章标签 基础 操作 qt 文件目录

本文主要是介绍QT基础 - 文件目录操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

零. 简介

一. QDir

二. QFileSystemWatcher

三. 总结


零. 简介

在 QT 中,文件目录操作主要涉及到QDir类和QFileInfo类。

QDir类具有存取目录结构和内容的能力,可以操作目录、存取目录或文件信息、操作底层文件系统,还可以存取 Qt 的资源文件。它使用“/”作为通用目录分隔符。

QDir类的一些常用方法包括:

  • 构造目录对象:可以使用不同的构造函数来创建QDir对象,例如直接传入路径字符串,或指定过滤文件名字符串、排序方式和过滤文件类型等。
  • 检查目录或文件是否存在:使用exists()函数,可检查当前QDir包含的目录是否存在,或传入指定的目录和文件名来判断其是否存在。
  • 获取目录路径相关信息:如dirName()返回文件名称(如果QDir包含的是目录则返回空字符串);filePath(const QString &fileName) 获取指定文件的当前路径;absoluteFilePath(const QString &fileName) 获取指定文件的绝对路径;relativeFilePath(const QString &fileName)获取指定文件的相对路径。需注意这些函数不会检测文件和路径是否真实存在,调用前需使用exists函数确保路径正确。
  • 判断目录属性isAbsolute()判断是否为绝对路径;isRelative()判断是否为相对路径;isReadable()判断目录或文件是否可读(在 Linux 系统下某些目录普通用户可能无法读取)。
  • 相对路径到绝对路径的转换:使用makeAbsolute()将相对路径转为绝对路径,若路径已是绝对路径则不会产生作用,成功返回true
  • 获取应用程序当前路径:通过静态函数currentPath()current()获取当前应用程序的路径。
  • 切换目录:使用cd(const QString &dirName)切换目录,或使用静态函数setCurrent(const QString &path)改变应用程序的工作路径,也可使用setPath(const QString &path)设置QDir包含的路径。
  • 获取系统根目录路径:静态函数rootPath()root()返回系统的根路径(在 Windows 系统下返回系统的根目录,如“C:/”,在 Linux 下返回“/”);homePath函数返回用户主目录绝对路径;tempPath函数返回系统的临时目录绝对路径。
  • 删除目录和文件remove(const QString &fileName)用于删除指定的文件(不能删除目录),rmdir()用于删除目录。

QFileInfo类则提供了与系统无关的文件信息,包括文件的名称、在文件系统中的位置(路径)、文件的访问权限以及是否是一个目录或者符号链接等。还可以获取文件的大小、最近一次修改/读取的时间等。可在构建QFileInfo对象时设置指向的文件,或之后使用setFile()来设置。常用方法如使用exists()查看文件是否存在,使用size()获取文件的大小,使用isFile()isDir()isSymLink()判断文件的类型等。

一. QDir

QDir 类用于操作目录路径、访问目录内容和执行与目录相关的操作。它提供了一种方便且跨平台的方式来处理文件系统中的目录。

属性

  • path:获取或设置当前目录的路径。

方法

  • exists(const QString &name):检查指定名称的文件或目录是否存在。
  • mkdir(const QString &dirName):创建一个新的目录。
  • rmdir(const QString &dirName):删除一个空目录。
  • entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort):获取目录中的文件和子目录列表。
  • isRoot():判断当前目录是否为根目录。
  • homePath():获取用户主目录的路径。
  • currentPath():获取当前工作目录的路径。

例子

#include <QCoreApplication>
#include <QDir>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QDir dir;// 获取当前工作目录QString currentPath = dir.currentPath();qDebug() << "Current path: " << currentPath;// 检查目录是否存在if (dir.exists("test_directory")){qDebug() << "Directory exists";}else{// 创建目录if (dir.mkdir("test_directory")){qDebug() << "Directory created";}else{qDebug() << "Failed to create directory";}}// 获取目录中的文件和子目录列表QStringList entries = dir.entryList(QDir::Files | QDir::Dirs);for (const QString &entry : entries){qDebug() << entry;}return a.exec();
}

在这个例子中,首先获取了当前工作目录,然后检查指定目录是否存在,如果不存在则尝试创建。最后获取并打印目录中的文件和子目录列表。

效果图

二. QFileSystemWatcher

QFileSystemWatcher 类用于监视文件和目录的更改。它可以检测文件的创建、删除、修改以及目录的内容更改等事件,并发出相应的信号通知应用程序。

属性

  • directories:包含被监视的目录列表。
  • files:包含被监视的文件列表。

方法

  • addPath(const QString &path):添加要监视的文件或目录路径。
  • addPaths(const QStringList &paths):添加多个要监视的文件或目录路径。
  • removePath(const QString &path):移除指定的被监视路径。
  • removePaths(const QStringList &paths):移除多个指定的被监视路径。

例子

#include <QCoreApplication>
#include <QFileSystemWatcher>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QFileSystemWatcher watcher;// 添加要监视的文件和目录watcher.addPath("E:\\QTCode\\One\\Two\\test\\test.txt");watcher.addPath("E:\\QTCode\\One\\Two\\test");// 连接信号和槽,处理文件系统更改事件QObject::connect(&watcher, &QFileSystemWatcher::directoryChanged, [](const QString &path) {qDebug() << "Directory changed: " << path;});QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [](const QString &path) {qDebug() << "File changed: " << path;});return a.exec();
}

在上述例子中,创建了一个 QFileSystemWatcher 对象,添加了一个文件和一个目录进行监视,并连接了相应的信号来处理文件系统的更改事件。

效果图

修改文件名

删除文件

三. 总结

在 QT 中,文件和目录操作涉及到几个相关的类,以下是对这些类的总结:

QFile:用于读写文件,支持文本文件和二进制文件的操作。

常用成员函数:

  • exists():判断文件是否存在。
  • remove():删除文件。
  • copy():将文件内容复制到新文件。
  • open():使用设定的 OpenMode 模式打开文件。
  • close():关闭文件。
  • flush():将所有缓冲的数据刷新到文件中。
  • size():返回文件的大小。
  • pos():返回数据写入或读取文件的位置,即文件指针的位置。
  • seek():设置文件指针的位置。
  • read():读取文件数据。
  • write():写入数据到文件。

QDir:用于操作目录。

常用成员函数:

  • exists():判断目录是否存在。
  • currentPath():获取当前工作目录。
  • setPath():设置目录路径。
  • dirName():获取目录名。
  • entryList():获取目录中的文件和子目录列表。
  • mkdir():创建目录。
  • rmdir():删除目录。
  • remove():删除文件。

QFileInfo:提供与系统无关的文件信息,例如文件的名称、路径、访问权限、是否为目录或符号链接等,还可获取文件的大小和最近修改/读取时间等。

常用成员函数:

  • exists():查看文件是否存在。
  • size():获取文件的大小。
  • isFile()isDir()isSymLink():分别判断是否是文件、目录、符号链接。
  • symLinkTarget():返回符号链接指向的文件的名称。
  • path()fileName():分别获取文件的路径和文件名。
  • baseName():获取文件名中的基本名称。
  • suffix():获取文件名的后缀。
  • completeSuffix():获取复合后缀。
  • created()lastModified()lastRead():分别返回文件的创建、最后修改和最后读取时间。
  • isReadable()isWritable()inExecutable():分别获取文件的可读、可写和可执行权限。
  • owner()ownerId()group()grouped():获取文件的所有者、所有者 ID、所属组和组 ID。
  • permission():一次性读取文件的访问权限和所有权。

QFileSystemWatcher:提供了一个接口,用于监视文件和目录的变化。可以使用 addPath()添加要监视的文件或目录路径,使用 removePath()移除监视路径。当被监视的文件或目录发生变化时,会发出相应的信号,如 directoryChanged 信号(目录或其内容被修改或移除时发射)和 fileChanged 信号(文件被修改、重命名或移除时发射)。

另外,还有用于操作临时文件的 QTemporaryFile 和操作临时目录的 QTemporaryDir 类。

在进行文件和目录操作时,需注意文件的打开模式、路径的表示(使用“/”作为目录分隔符)以及权限等问题。通过这些类提供的方法,可以方便地进行文件和目录的各种操作,以及对文件系统的监视。具体的使用方式可以根据项目需求,结合上述类的成员函数进行相应的编程。

这篇关于QT基础 - 文件目录操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083823

相关文章

SpringBoot操作MaxComputer方式(保姆级教程)

《SpringBoot操作MaxComputer方式(保姆级教程)》:本文主要介绍SpringBoot操作MaxComputer方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录引言uqNqjoe一、引入依赖二、配置文件 application.properties(信息用自己

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作

C# winform操作CSV格式文件

《C#winform操作CSV格式文件》这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录实例一实例效果实现代码效果展示实例二实例效果完整代码实例一实例效果当在winform界面中点击读取按钮时 将csv中

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表