QT基础 - 文件目录操作

news2024/11/27 2:36:22

目录

零. 简介

一. 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 类。

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

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

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

相关文章

公司名称含有关商标名称可能涉及侵权!

有个朋友找到普推商标知产老杨&#xff0c;说有个人给他打电话&#xff0c;说他的公司名称侵权另一家的商标名称&#xff0c;让他要改下公司名称&#xff0c;不改就要告侵权&#xff0c;此前看到过许多&#xff0c;在一些省市注册公司时&#xff0c;如果公司名称与已注册商标相…

不懂就问,开通小程序地理位置接口有那么难吗?

小程序地理位置接口有什么功能&#xff1f; 若提审后被驳回&#xff0c;理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;那么遇到这种情况&#x…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《含氢综合能源系统多目标最优折中分布鲁棒低碳调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

MLP多层感知器:AI人工智能神经网络的基石

MLP 是指多层感知器&#xff08;Multilayer Perceptron&#xff09;&#xff0c;是一种基础人工神经网络模型&#xff08;ANN&#xff0c;Artificial Neural Network&#xff09;。MLP 的核心是通过深度学习从大量数据中学习特征和模式&#xff0c;并训练参数。通过参数与激活函…

高精度乘法的实现

这是C算法基础-基础算法专栏的第九篇文章&#xff0c;专栏详情请见此处。 引入 上次我们学习了高精度加法的实现&#xff0c;这次我们要学习高精度减法的实现。 高精度乘法与高精度加法的定义、前置过程都是大致相同的&#xff0c;如果想了解具体内容&#xff0c;可以移步至我的…

10.2 JavaEE——Spring MVC入门程序

要求在浏览器发起请求&#xff0c;由Spring MVC接收请求并响应&#xff0c;具体实现步骤如下。 一、创建项目 在IDEA中&#xff0c;创建一个名称为chapter10的Maven Web项目。 &#xff08;一&#xff09;手动设置webapp文件夹 1、单击IDEA工具栏中的File→“Project Structu…

【linux】shell脚本中设置字体颜色,背景颜色详细攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

通过开放解析智能分块提高 RAG 性能

如果要使用大型语言模型 &#xff08;&#xff09;LLMs 实现生成式 AI 解决方案&#xff0c;则应考虑使用检索增强生成 &#xff08;RAG&#xff09; 的策略来生成上下文感知提示LLM。在启用 LLM RAG 的预生产管道中发生的一个重要过程是删除文档文本&#xff0c;以便仅将文档中…

JupyterLab使用指南(八):更改JupterLab左侧默认打开目录

在JupyterLab中&#xff0c;默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项&#xff0c;JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…

Apache Arrow 和数据的未来:开放标准推动人工智能发展

Apache Arrow 是一种开源列式内存格式&#xff0c;适用于平面数据和分层数据。在现代数据湖中&#xff0c;开放数据格式&#xff08;如 Apache Arrow&#xff09;位于现代对象存储的存储层中。这些格式成为对象存储中的对象。 在最新版本中&#xff0c;Apache Arrow 宣布计划从…

第二十七篇——通信趋势:5G和IOT的商机在哪里?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 借势的重要性&#xff0c;但是要做到借势&#xff0c;得先看到&#xff0…

WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定

WPF文本绑定显示格式StringFormat设置 特殊格式设置日期/时间使用系统默认样式自定义格式&#xff1a; 绑定多个属性&#xff08;多重绑定&#xff09;多重绑定中的特殊字符示例&#xff1a; 特殊格式设置 在Textblock等文本控件中&#xff0c;我们经常要显示一些日期和时间&a…

Android (已解决)Execution failed for task ‘:app:lint‘

文章目录 一、错误原因二、解决方法 一、错误原因 这个错误信息表示在执行 Lint 检查时发现了错误&#xff0c;导致构建过程被中断。Lint 是一个用于检测 Android 项目中潜在问题的工具&#xff0c;比如性能、安全性、可用性等方面的问题。当Lint检查到严重错误时&#xff0c;…

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法 一、项目提出前状况 1)立项背景 轧钢退火酸洗生产线的酸洗过程需要使用大量的硫酸、盐酸、硝酸、氢氟酸等酸液对钢带的表面进行清洗,酸洗过后产生较多的酸洗废水,酸洗废水需要经过处理达到污水排放标准后才能排放。其中酸…

Android企业级实战-界面篇-5

3.colors.xml文件内容&#xff08;此案例可用&#xff09; #ffb2b2b2 #ff14c4bc color/jimeng_text_tertiary_light color/jimeng_green_light color/jimeng_background_secondary_light color/jimeng_background_secondary_light #7f4eb7ba 4.strings.xml文件内容&…

Android系统揭秘(一)-Activity启动流程(上)

public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread (IApplicationThread) contextThread; … try { … int result …

React实现列表列宽可拖拽

1.中文文档上没有&#xff0c;英文文档上有&#xff08;这个老六&#xff01;&#xff01;&#xff09; <Tableborderedcomponents{{header: {cell: ResizableTitle,},}}columns{mergedColumns}dataSource{data} />React - Resizable column

20240622 每日AI必读资讯

&#x1f916;力压GPT-4o&#xff01;新王Claude 3.5 Sonnet来了&#xff0c;直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型&#xff0c;同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…

鸿蒙 登录界面示例

1.b站登录界面 我的b站教学视频&#xff1a;https://www.bilibili.com/video/BV1LQgQexEGm/https://www.bilibili.com/video/BV1LQgQexEGm/ 最终实现效果&#xff1a; 需要准备2张图片&#xff0c;分别是向下和向右边的图标 代码&#xff1a; Entry Component struct Index…

CentOS7 部署安装ClickHouse

一、什么是ClickHouse ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP场景需要…