【QT学习十四】 文件目录操作

目录

一、概述

二、详解

1. QFile

QFile 类中的一些静态方法:

使用示例:

注意事项:

2. QDir

成员函数

使用实例:

注意事项:

3. QFileInfo

成员函数

使用实例

4. QTemporaryFile

成员函数

使用实例

注意事项:

5. QFileSystemModel

实例

6.QCoreApplication

使用实例

7.QFileSystemWatcher

成员函数

信号

使用实例


一、概述

        Qt提供了一些用于文件和目录操作的类,这些类使得在Qt应用程序中进行文件系统操作变得非常方便。以下是一些常用的文件和目录操作相关的类:

  1. QFile:用于执行文件的操作,例如读取、写入、复制和移动文件等。

  2. QDir:提供了对目录的操作,例如列出目录中的文件、创建和删除目录等。

  3. QFileInfo:提供了关于文件和目录的元信息,如文件大小、创建时间、修改时间等。

  4. QTemporaryFile:用于创建临时文件,通常用于临时性的文件操作。

  5. QFileSystemModel:提供了一个模型来展示文件系统的结构,可以在Qt的视图组件中使用,如QTreeView和QListView。

  6. QCoreApplication:获取应用程序的名称、路径、版本和组织名称等信息。

  7. QFileSystemWatcher: 用于监视文件系统中文件和目录变化。

        这些类都是Qt核心模块的一部分,可以在Qt文档中找到详细的使用说明和示例代码。使用这些类,开发者可以轻松地在Qt应用程序中进行文件和目录操作,而不必依赖于操作系统特定的API。

二、详解

        当涉及到文件和目录操作时,Qt提供了一些功能强大且易于使用的类。以下更详细地介绍下每个类的功能,并提供一些具体的实例说明以及注意事项。

1. QFile

QFile 类提供了许多方法来执行文件级别的操作,如读取、写入、复制和移动文件等。

QFile 类中的一些静态方法:

- copy(const QString &fileName, const QString &newName):复制一个文件。fileName 是原始文件名,newName 是新文件名。

- decodeName(const QByteArray &localFileName):将本地文件名解码为 Unicode 编码的文件名。

- decodeName(const char *localFileName):重载版本,接受 char * 类型的本地文件名。

- encodeName(const QString &fileName):将 Unicode 编码的文件名编码为本地文件名。

- exists(const QString &fileName):检查文件是否存在。

- link(const QString &fileName, const QString &linkName):在文件系统中创建一个符号链接。

- moveToTrash(const QString &fileName, QString *pathInTrash = nullptr):将文件移到回收站。可选参数 pathInTrash 用于获取文件在回收站中的路径。

- permissions(const QString &fileName):获取文件的权限。

- remove(const QString &fileName):删除文件。

- rename(const QString &oldName, const QString &newName):重命名文件。

- resize(const QString &fileName, qint64 sz):调整文件大小为 sz 字节。

- setPermissions(const QString &fileName, QFileDevice::Permissions permissions):设置文件的权限。

- symLinkTarget(const QString &fileName):获取符号链接文件的目标路径。

使用示例:

#include <QFile>
#include <QTextStream>
#include <QDebug>int main() {// 创建一个文件对象QFile file("D:\\Desktop\\test.txt");// 打开文件,以只读模式打开if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qDebug() << "Failed to open file";return -1;}// 创建一个文本流,并读取文件内容QTextStream in(&file);QString content = in.readAll();// 输出文件内容qDebug() << "File content:" << content;// 关闭文件file.close();return 0;
}

注意事项:

  • 在打开文件时,一定要检查是否成功打开文件,使用 open() 方法返回的布尔值进行检查。
  • 使用文件之后,一定要记得关闭文件,可以通过 close() 方法来关闭文件。

2. QDir

QDir 类提供了对目录的操作,如列出目录中的文件、创建和删除目录等。

成员函数

QDir 类提供了一系列方法来获取目录的信息、列出目录中的文件和子目录、创建和删除目录等。以下是这些方法的简要说明:

- QString absoluteFilePath(const QString &fileName) const:返回指定文件名的绝对路径。

- QString absolutePath() const:返回目录的绝对路径。

- QString canonicalPath() const:返回规范化的路径,即去除符号链接并且进行路径合并。

- bool cd(const QString &dirName):切换到指定的子目录。

- bool cdUp():切换到父目录。

- uint count() const:返回目录中的条目数(文件和子目录的总数)。

- QString dirName() const:返回目录的名称。

- QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const:返回符合给定名称过滤器、过滤器和排序标志的文件和子目录的信息列表。

- QFileInfoList entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const:重载版本,返回所有文件和子目录的信息列表。

- QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const:返回符合给定名称过滤器、过滤器和排序标志的文件和子目录的名称列表。

- QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const:重载版本,返回所有文件和子目录的名称列表。

- bool exists(const QString &name) const:检查给定名称的文件或子目录是否存在。

- bool exists() const:检查当前目录是否存在。

- QString filePath(const QString &fileName) const:返回指定文件名的完整路径。

- QDir::Filters filter() const:返回目录过滤器。

- bool isAbsolute() const:检查目录是否是绝对路径。

- bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const:检查目录是否为空。

- bool isReadable() const:检查目录是否可读。

- bool isRelative() const:检查目录是否是相对路径。

- bool isRoot() const:检查目录是否是根目录。

- bool makeAbsolute():将相对路径转换为绝对路径。

- bool mkdir(const QString &dirName) const:创建一个子目录。

- bool mkpath(const QString &dirPath) const:创建一个多级目录。

- QStringList nameFilters() const:返回名称过滤器列表。

- QString path() const:返回目录的路径。

- void refresh() const:刷新目录的内容,以便反映最新的文件和子目录。

- QString relativeFilePath(const QString &fileName) const:返回指定文件名的相对路径。

- bool remove(const QString &fileName):删除指定文件或子目录。

- bool removeRecursively():递归删除目录及其所有内容。

- bool rename(const QString &oldName, const QString &newName):重命名文件或子目录。

- bool rmdir(const QString &dirName) const:删除指定的子目录。

- bool rmpath(const QString &dirPath) const:递归删除指定的目录及其所有内容。

- void setFilter(QDir::Filters filters):设置目录过滤器。

- void setNameFilters(const QStringList &nameFilters):设置名称过滤器列表。

- void setPath(const QString &path):设置目录的路径。

- void setSorting(QDir::SortFlags sort):设置排序标志。

- QDir::SortFlags sorting() const:返回排序标志。

- void swap(QDir &other):交换两个目录对象的内容。

使用实例:

#include <QDir>
#include <QDebug>int main() {// 创建一个目录对象QDir dir(".");// 列出目录中的文件QStringList files = dir.entryList(QDir::Files);qDebug() << "Files in the current directory:";foreach(const QString &file, files) {qDebug() << file;}// 创建一个新目录QDir().mkdir("new_directory");// 删除一个目录QDir().rmdir("new_directory");return 0;
}

注意事项:

  • 使用 entryList() 方法可以列出目录中的文件和子目录。
  • 使用 mkdir() 方法可以创建新目录,使用 rmdir() 方法可以删除目录。

3. QFileInfo

QFileInfo 类提供了关于文件和目录的元信息,如文件大小、创建时间、修改时间等。

成员函数

以下是 QFileInfo 类的一些重要成员函数:

- absoluteDir() const: 返回文件所在目录的绝对路径的 `QDir` 对象。

- absoluteFilePath() const: 返回文件的绝对路径。

- absolutePath() const: 返回文件所在目录的绝对路径。

- baseName() const: 返回文件的基本名称(不包括路径和文件扩展名)。

- birthTime() const: 返回文件的创建时间。

- bundleName() const: 返回文件的 bundle 名称(适用于 macOS)。

- caching() const: 返回是否启用了文件信息缓存。

- canonicalFilePath() const: 返回规范化的文件路径(解析符号链接、路径转义等)。

- canonicalPath() const: 返回文件所在目录的规范化路径。

- completeBaseName() const: 返回文件的完整基本名称(包括路径但不包括文件扩展名)。

- completeSuffix() const: 返回文件的完整后缀名(包括点号)。

- dir() const: 返回文件所在目录的 `QDir` 对象。

- exists() const: 检查文件是否存在。

- fileName() const: 返回文件名(包括路径)。

- filePath() const: 返回文件路径(包括路径)。

- fileTime(QFile::FileTime time) const: 返回文件的指定时间戳(例如最后修改时间、最后访问时间等)。

- group() const: 返回文件所属组。

- groupId() const: 返回文件的组 ID。

- isAbsolute() const: 检查文件路径是否是绝对路径。

- isBundle() const: 检查文件是否是 bundle 文件(适用于 macOS)。

- isDir() const: 检查文件是否是目录。

- isExecutable() const: 检查文件是否可执行。

- isFile() const: 检查文件是否是普通文件。

- isHidden() const: 检查文件是否是隐藏文件。

- isJunction() const: 检查文件是否是 junction(适用于 Windows)。

- isNativePath() const: 检查文件路径是否是本地路径。

- isReadable() const: 检查文件是否可读。

- isRelative() const: 检查文件路径是否是相对路径。

- isRoot() const: 检查文件路径是否是根目录。

- isShortcut() const: 检查文件是否是快捷方式(适用于 Windows)。

- isSymLink() const: 检查文件是否是符号链接。

- isSymbolicLink() const: 重载版本,检查文件是否是符号链接。

- isWritable() const: 检查文件是否可写。

- lastModified() const: 返回文件的最后修改时间。

- lastRead() const: 返回文件的最后访问时间。

使用实例

#include <QFileInfo>
#include <QDebug>
#include <QDateTime>int main() {// 创建一个文件信息对象QFileInfo fileInfo("D:\\Desktop\\test.txt");// 获取文件路径QString filePath = fileInfo.absoluteFilePath();qDebug() << "Absolute file path:" << filePath;// 获取文件大小qint64 fileSize = fileInfo.size();qDebug() << "File size:" << fileSize << "bytes";// 获取文件创建时间QDateTime createdTime = fileInfo.created();qDebug() << "File created time:" << createdTime.toString(Qt::ISODate);return 0;
}

4. QTemporaryFile

QTemporaryFile 类用于创建临时文件,通常用于临时性的文件操作。

成员函数

- bool autoRemove() const:返回当前是否启用了自动删除标志。如果返回 `true`,则在销毁 `QTemporaryFile` 对象时,相关的临时文件将被自动删除;如果返回 `false`,则需要手动调用 `remove()` 函数来删除临时文件。

- QString fileTemplate() const:返回当前的文件名模板。文件名模板是用于生成临时文件名的字符串模板,默认情况下为系统默认的临时文件名模板。

- bool open():尝试打开临时文件。如果打开成功,则返回 `true`,否则返回 `false`。注意,在调用此函数之前,应该已经设置了文件名模板和自动删除标志,并且需要在打开文件之后才能对文件进行读写操作。

- void setAutoRemove(bool b):设置是否启用自动删除标志。如果参数 `b` 为 `true`,则在销毁 `QTemporaryFile` 对象时会自动删除相关的临时文件;如果参数 `b` 为 `false`,则需要手动调用 `remove()` 函数来删除临时文件。

- void setFileTemplate(const QString &name):设置文件名模板。文件名模板是一个字符串,用于生成临时文件的文件名。可以在模板中使用 `%1` 来表示一个随机的唯一标识符。默认情况下,文件名模板采用系统默认的临时文件名模板。

使用实例

#include <QTemporaryFile>
#include <QDebug>int main() {// 创建临时文件对象QTemporaryFile tempFile;// 设置自动删除标志tempFile.setAutoRemove(true);// 打开临时文件if (!tempFile.open()) {qDebug() << "Failed to open temporary file";return -1;}// 向临时文件写入数据tempFile.write("Hello, world!");// 关闭临时文件tempFile.close();// 读取临时文件内容if (tempFile.open()) {QByteArray data = tempFile.readAll();qDebug() << "Temporary file content:" << data;tempFile.close();} else {qDebug() << "Failed to open temporary file for reading";}return 0;
}

注意事项:

  • 使用 open() 方法打开临时文件时,一定要检查是否成功打开文件。
  • 临时文件对象在作用域结束时会自动删除文件,无需手动删除。

5. QFileSystemModel

QFileSystemModel 类提供了一个模型来展示文件系统的结构,可以在Qt的视图组件中使用,如 QTreeViewQListView

实例

#include <QFileSystemModel>
#include <QTreeView>
#include <QApplication>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个文件系统模型QFileSystemModel model;model.setRootPath(QDir::currentPath());// 创建一个树视图,并将文件系统模型设置为其模型QTreeView treeView;treeView.setModel(&model);treeView.setRootIndex(model.index(QDir::currentPath()));treeView.show();return app.exec();
}

6.QCoreApplication

 QCoreApplication 类是Qt中的一个核心类,用于创建Qt应用程序的基本框架。它提供了一些功能,使得应用程序可以处理事件循环、管理应用程序的执行以及进行一些基本的初始化工作。主要用于创建不依赖于图形界面的应用程序,例如控制台应用程序和后台服务。

        可以通过 applicationName()applicationVersion()organizationName() 等方法获取应用程序的名称、版本和组织名称等信息。

使用实例

#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);qDebug() << "Application name:" << app.applicationName();qDebug() << "Application version:" << app.applicationVersion();qDebug() << "Organization name:" << app.organizationName();qDebug() << "Command line arguments:";QStringList args = app.arguments();foreach(const QString &arg, args) {qDebug() << arg;}// 执行应用程序的事件循环return app.exec();
}

7.QFileSystemWatcher

QFileSystemWatcher 类是 Qt 中用于监视文件系统中文件和目录变化的类。它可以监视一个或多个文件或目录,当被监视的文件或目录发生变化时,例如被修改、重命名、删除等操作,QFileSystemWatcher 将会发出相应的信号,通知应用程序

成员函数

- bool addPath(const QString &path):添加要监视的单个文件或目录,并返回是否添加成功。如果成功添加,则返回 true;如果文件或目录已经在监视列表中,则返回 false。

- QStringList addPaths(const QStringList &paths):添加要监视的多个文件或目录,并返回已成功添加到监视列表的文件和目录列表。

- QStringList directories() const:返回当前被监视的目录列表。

- QStringList files() const:返回当前被监视的文件列表。

- bool removePath(const QString &path):从监视列表中移除单个文件或目录,并返回是否移除成功。如果成功移除,则返回 true;如果文件或目录不在监视列表中,则返回 false。

- QStringList removePaths(const QStringList &paths):从监视列表中移除多个文件或目录,并返回已成功移除的文件和目录列表。

信号


- directoryChanged(const QString &path):目录发生变化时发出的信号,参数为发生变化的目录路径。

- fileChanged(const QString &path):文件发生变化时发出的信号,参数为发生变化的文件路径。

使用实例

#include <QCoreApplication>
#include <QFileSystemWatcher>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFileSystemWatcher watcher;// 添加要监视的文件或目录watcher.addPath("D:\\Desktop\\file.txt");watcher.addPath("D:\\Desktop");// 监听文件变化信号QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [&] (const QString &path) {qDebug() << "File" << path << "changed";});// 监听目录变化信号QObject::connect(&watcher, &QFileSystemWatcher::directoryChanged, [&] (const QString &path) {qDebug() << "Directory" << path << "changed";});return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust语言之集合

文章目录 一、元组&#xff08;tuple&#xff09;1.元组定义2.元组使用解构索引 3.元组修改非可变元组可变元组类型不一致 二、数组1.数组不可变数组定义可变数组定义数组使用数组修改数组的遍历 2.动态数组-向量&#xff08;Vector&#xff09;向量定义向量遍历向量追加向量插…

MongoDB聚合: $sort

聚合的$sort阶段对所有输入文件进行排序&#xff0c;并按排序顺序返回管道。 语法 { $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }$sort阶段参数为一个文档&#xff0c;该文档指定了要排序的字段和相应的排序顺序。<sort or…

[职场] 公安管理学就业方向及前景 #媒体#笔记#笔记

公安管理学就业方向及前景 公安管理学是中国普通高等学校本科专业。本专业文理兼收&#xff0c;学制4年&#xff0c;授予法学学士学位。本专业培养掌握马克思主义基本原理&#xff0c;政治坚定&#xff0c;坚持党和国家的路线、方针、政策&#xff0c;具有良好职业素养、科学素…

获取视频帧图片

在实现了minio文件上传的基础上进行操作 一、编写pom <dependency><groupId>org.jcodec</groupId><artifactId>jcodec</artifactId><version>0.2.5</version> </dependency> <dependency><groupId>org.jcodec<…

【小程序】基础API——面板API接口介绍

ty.preloadPanel 面板预下载 需引入BizKit&#xff0c;且在>3.0.0版本才可使用 参数 Object object 属性类型默认值必填说明deviceIdstring是设备 idextraInfoPanelExtraParams否额外面板信息 当预下载的是二级面板时, 需要传递的额外信息completefunction否接口调用结束…

PMP考试之20240209

1、生物制药公司ClinicaLabs的一位项目经理打算与她的经理讨论为其团队无法执行的复杂活动获取额外资源的问题。一旦活动完成&#xff0c;这些资源将立即投入项目。在这种情况下&#xff0c;项目经理最需要以下哪项技能&#xff1f; A.确定资源需求的规划技能 B.使经理相信她…

git恢复rebase过程中遇到权限问题和丢失的提交

文章目录 一、检查丢失的提交是否还在 reflog 中二、创建一个新分支来恢复丢失的提交三、处理权限问题四. 使用 git fsck 查找丢失对象1、创建一个新分支来恢复该提交2、检查和合并提交 五. 介绍git中命令reflog 与 fsck1、git reflog2、git fsck使用场景 一、检查丢失的提交是…

freesql orm 使用 DynamicFilterInfo 拼接日期查询条件时间格式一个难得的经验

文本到时间条件的转换 前端输入 1253-3 , 后台提示"varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值" 经查询, mssql 【datetime】数据类型&#xff1a;最大是9999年12 月31日&#xff0c;最小是1753年1月1日 所以要拼接限制一下, 只是 if (val.…

迅为RK3588开发板ubuntu和window互传图形界面直接拖拽进行文件传输

确保以及安装了 VMware Tools。如下图所示表示已安装过了。 和 windows 端文件夹间传输一样直接拖拽进去即可&#xff0c;如下图所示&#xff1a; 也可拖拽到终端&#xff0c;如下图所示&#xff1a; 更多内容可以B站搜索迅为RK3588开发板

什么是系统工程(字幕)22

0 00:00:00,650 --> 00:00:02,660 那么下一个呢&#xff0c;就是 1 00:00:03,200 --> 00:00:04,770 图16.12 2 00:00:05,740 --> 00:00:07,910 这是一个活动图 3 00:00:09,090 --> 00:00:11,930 表达了蒸馏这个水的 4 00:00:12,280 --> 00:00:13,470 过程的…

一文彻底搞懂Redis的内存回收机制和内存过期淘汰策略

文章目录 1. Redis内存回收机制2. Redis过期策略3. Redis淘汰策略3.1 LRU算法3.2 缓存清理配置3.3 Redis数据淘汰策略3.4 缓存清理的流程 4. 总结 关于 Redis 内存回收机制和内存过期淘汰策略的常见问题&#xff1a; 什么是 Redis 的内存回收机制&#xff1f; Redis 的内存回收…

百家cms代审

环境搭建 源码链接如下所示 https://gitee.com/openbaijia/baijiacms 安装至本地后 直接解压到phpstudy的www目录下即可 接下来去创建一个数据库用于存储CMS信息。&#xff08;在Mysql命令行中执行&#xff09; 接下来访问CMS&#xff0c;会默认跳转至安装界面 数据库名称和…

原根primitive root

&#xff08;a,m&#xff09;1&#xff0c;若,则称a为模N的原根。 以下程序只能判断结果为简化剩余系情况下的模N的原根。 对于模4的primitive_root3,模9的primitive_root2,5这些情况无法判断。 def find_primitive_root(n):for base in range(1,n):l[]for index in range(…

uni使用openlayer加载本机离线地图

manifest.json添加配置 "runmode": "liberate"(默认为normal) 把地图打包进apk&#xff0c;这样手机每次访问地图就可以访问到工程文件夹的地图资源了&#xff0c;不用每次都请求云资源&#xff0c;消耗流量太大了

分治法求解最大子数组和问题

leetcode 53 53. 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 #define max(a,b) ((a)>(b)?(a):(b)) int maxSubArr…

Huggingface上传模型

Huggingface上传自己的模型 参考 https://juejin.cn/post/7081452948550746148https://huggingface.co/blog/password-git-deprecationAdding your model to the Hugging Face Hub&#xff0c; huggingface.co/docs/hub/ad…Welcome&#xff0c;huggingface.co/welcome三句指…

【数据结构】排序之冒泡排序和快速排序

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 交换排序1.1 冒泡排序1.2 快速排序1.3 快速排序优化1.4 快速排序非递归 1. 交换排序 基本思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换…

【力扣每日一题】力扣236二叉树的最近公共祖先

题目来源 力扣236二叉树的最近公共祖先 题目概述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的…

VUE2和VUE3区别对比一览

## Vue3总结 ### 官方文档 * [Vue3](https://v3.cn.vuejs.org/api/options*data.html) * [Vue2](https://vuejs.bootcss.com/api/) ### Vue3相对于Vue2的语法特性#### 1.获取数据 * vue2 javascript export default {data() {return {name: myName,}},mounted() {console.log(t…

【专业技术】高效并行分布式深度学习策略,助力模型训练与量化

尊敬的客户&#xff0c;您好&#xff01;我们是一家专注于提供高效深度学习解决方案的专业团队&#xff0c;为您提供并行分布式策略、高效精调策略、大模型无损量化和高性能推理服务。 我们的服务包括&#xff1a; 并行分布式策略&#xff1a;我们的Trainer封装支持多种并行配…