c++QT文件操作

news2025/2/26 22:23:36

1 介绍

        QT的文件操作来源于其抽象基类QIODevice,中用于处理输入输出设备。提供了统一的接口来处理不同类型的数据源,如文件、套接字、缓冲区等。QIODevice 主要用于读取和写入数据,无论数据来自何种源头,都可以通过 QIODevice 统一地进行处理。

2 成员函数和用法

2.1 成员函数

  1. 打开和关闭: 通过 open(QIODevice::OpenMode mode) 函数可以打开 QIODevice,并且需要指定打开的模式,如只读、只写、读写等。关闭 QIODevice 可以使用 close() 函数。

  2. 读取和写入数据: 使用 read(char *data, qint64 maxSize) 函数从 QIODevice 中读取数据,将读取的数据存储在 data 缓冲区中,最大读取量为 maxSize。使用 write(const char *data, qint64 maxSize) 函数将数据写入 QIODevice

  3. 位置和移动: 通过 pos() 函数可以获取当前的读写位置,通过 seek(qint64 pos) 函数可以移动到指定的读写位置。

  4. 判断状态: 可以使用 atEnd() 函数判断是否已经读取到 QIODevice 的末尾。还可以使用 error() 函数判断是否出现了读写错误。

  5. 模式和标志: QIODevice 可以以不同的模式打开,如文本模式和二进制模式。可以使用 QIODevice::TextQIODevice::Binary 标志来设置。

  6. 继承和用法: QIODevice 是一个抽象基类,许多与输入输出相关的类都继承自它,如 QFileQTcpSocketQBuffer 等。你可以根据具体的需求选择合适的派生类进行文件、网络通信或内存数据的读写操作。

2.2 用法

#include <QCoreApplication>
#include <QBuffer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建一个 QBuffer 对象,用于读写内存数据
    QBuffer buffer;
    buffer.open(QIODevice::ReadWrite); // 打开为读写模式

    // 写入数据到缓冲区
    QByteArray data = "Hello, QIODevice!";
    buffer.write(data);

    // 移动读写位置到开头
    buffer.seek(0);

    // 从缓冲区读取数据
    QByteArray readData = buffer.readAll();
    qDebug() << "Read data: " << readData;

    return a.exec();
}

3 QCoreApplication

        QCoreApplication是 Qt 框架中用于管理应用程序的基础类,它提供了应用程序事件循环、事件处理和应用程序配置等功能。所有使用 Qt 编写的应用程序都需要至少一个 QCoreApplication 对象作为应用程序的核心。

  1. 应用程序的启动和退出: 、静态函数 int exec() 来、启动应用程序的事件循环,这个函数将一直运行,直到应用程序退出。使用 void quit() 函数来退出事件循环,终止应用程序。

  2. 事件处理: 通过 bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event) 函数可以向指定的对象发送事件。也可以通过 bool QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority) 在事件队列中插入一个事件。

  3. 应用程序信息 可以使用 QString QCoreApplication::applicationDirPath() 获取应用程序所在的目录路径,使用 QString QCoreApplication::applicationFilePath() 获取应用程序的完整路径,使用 QString QCoreApplication::applicationName() 获取应用程序的名称等。

  4. 命令行参数: 可以通过 QStringList QCoreApplication::arguments() 获取应用程序的命令行参数列表。

  5. 应用程序类型: Qt 提供了不同类型的应用程序类,如 QGuiApplication 用于 GUI 应用程序,QCoreApplication 用于非 GUI 应用程序等。

4  QIODevice派生类介绍

        当涉及到文件和目录操作时,Qt 提供了一组方便的类来处理,包括 `QFile`、`QFileInfo`、`QDir`、`QTemporaryFile` 和 `QFileSystemWatcher`。

1.  `QFile` 文件的读写操作:提供了打开、关闭、读取、写入和修改文件等功能。可以使用 `QFile` 来处理二进制和文本文件。

2. `QFileInfo` 提供了关于文件和目录的元信息。用来获取文件的属性、路径、扩展名、大小等信息,以及判断文件是否存在、是否可读、是否可写等。

3.   `QDir` 用于操作目录,提供了遍历目录、创建目录、删除目录、列出目录中的文件等功能。还可以用于文件路径的拼接、判断文件是否存在等。

4.  `QTemporaryFile` 用于创建临时文件,临时文件通常在程序运行结束后自动删除。它继承自 `QFile`,提供了创建、打开临时文件的功能。

5.   `QFileSystemWatcher` 可以监视文件和目录的变化,比如文件的创建、删除、修改等。当所监视的文件或目录发生变化时,`QFileSystemWatcher` 会发出相应的信号。

        示例:使用这些类进行文件和目录操作:

```cpp
#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QTemporaryFile>
#include <QFileSystemWatcher>
#include <QDebug>

int main(int argc, char *argv[])
{
    Q_UNUSED(argc);
    Q_UNUSED(argv);

    // 使用 QFile 进行文件读写操作
    QFile file("example.txt");
    if (file.open(QIODevice::ReadWrite)) {
        file.write("Hello, QFile!");
        file.close();
    }

    // 使用 QFileInfo 获取文件信息
    QFileInfo fileInfo("example.txt");
    qDebug() << "File size:" << fileInfo.size() << "bytes";
    qDebug() << "File path:" << fileInfo.filePath();
    qDebug() << "Is file readable:" << fileInfo.isReadable();

    // 使用 QDir 进行目录操作
    QDir dir(".");
    QStringList fileList = dir.entryList(QDir::Files);
    qDebug() << "Files in current directory:" << fileList;

    // 使用 QTemporaryFile 创建临时文件
    QTemporaryFile tempFile;
    if (tempFile.open()) {
        tempFile.write("Temporary content");
        tempFile.setAutoRemove(true); // 设置临时文件在关闭时自动删除
    }

    // 使用 QFileSystemWatcher 监视文件变化
    QFileSystemWatcher watcher;
    watcher.addPath("example.txt");
    QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [](const QString &path) {
        qDebug() << "File changed:" << path;
    });

    return 0;
}
```

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

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

相关文章

用 oneAPI 实现 AI 欺诈检测:一款智能图像识别工具

简介 虚假图像和视频日益成为社交媒体、新闻报道以及在线内容中的一大隐患。在这个信息爆炸的时代&#xff0c;如何准确地识别和应对这些虚假内容已经成为一个迫切的问题。为了帮助用户更好地辨别虚假内容&#xff0c;我开发了一款基于 oneAPI、TensorFlow 和 Neural Compress…

一文了解新能源电机国内主流供应商

作为新能源汽车核心三电系统之一的“电机”就好比燃油车的发动机一样&#xff0c;是车辆核心部件&#xff0c;但似乎消费者没太大关注这方面。今天我们给大家聊聊这个核心部件&#xff01; 一辆新能源汽车占生产成本最高的部件是动力电池&#xff0c;约占到30%左右&#xff0c…

ppt怎么压缩?试试这样压缩文件

当PPT文件体积过大时&#xff0c;打开的速度就会很慢&#xff0c;演示的时候刘程度也会受到影响&#xff0c;其次&#xff0c;现在很多平台对于上传的文件是有大小限制的&#xff0c;比如超过100M的文件就无法上传、发送等等&#xff0c;那么&#xff0c;怎么才能压缩PPT文件呢…

手撕HashMap源码

auth&#xff1a;虎 &#xff0c;2023年5月8日—???完。 前言&#xff1a; 最初在面试的时候&#xff0c;在个人栏第一条写了一句话“手撕HashMap”源码作为亮点&#xff0c;以下是曾经的学习笔记&#xff0c;目前来说不是很完整&#xff0c;有机会下次面试时候再补全吧~ 1…

python numpy数组水平和垂直合并

1 水平Horizontal合并 Horizontal:水平向右拉长 利用np.hstack()&#xff1a;原始数据size可以不一致 利用np.concatenate()&#xff1a;原始数据size可以不一致 import numpy as np # 三个一维数组 array1 np.array([1, 2, 3]) array2 np.array([4, 5, 6]) array3 np.ar…

Koan自动重装和Cobbler_web

Koan是Cobbler的辅助工具&#xff0c;可以实现很多功能&#xff0c;使用koan配合Cobbler可以实现快速重装Linux系统&#xff1a; 1、安装koan&#xff1a; yum install -y epel-releaseyum install -y koan 安装截图&#xff1a; 2、在客户机上&#xff0c;用koan选择要重装的…

【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(高级用法)

对于Httpclient请求机制进行设置操作处理。 Body注解申明一个请求体模板&#xff0c;模板中可以带有参数&#xff0c;与方法中Param注解申明的参数相匹配,使用方法如下: interface LoginClient {void login( String user, String password); } ...client.login("denomin…

小红书投放流程是什么,达人选择注意事项!

很多人会发现有些笔记的内容并不是很出彩&#xff0c;但是偏偏就火了&#xff0c;自己想去模仿就平平无奇&#xff0c;其中包含了很多因素&#xff0c;有运气、也有选题和博主发文思路在里面&#xff0c;今天&#xff0c;来和大家分享下小红书投放流程是什么&#xff0c;达人选…

Python Selenium 设置带账号密码的socks5代理,启动浏览器

selenium添加带有账密的socks5代理 我们都知道在使用selenium开发爬虫的时候不可避免的会使用socks5高匿名代理。一般情况下我们使用方法如下(开发语言为python)&#xff1a; from selenium import webdriver chrome_options webdriver.ChromeOptions() chrome_options.add_…

手动整理:腾讯云轻量应用服务器优缺点大全

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且特别合适&#xff0c;轻量2核2G3M带宽、2核2G4M、2核4G5M带宽、4核8G12M带宽&#xff0c;还有8核16G18M和16核32G28M配置可选&#xff0c;腾讯云服务器网分享腾讯云轻量应用服务器详细…

filebeat 采集k8s 中nginx deployment 日志

一、背景 在k8s集群中&#xff0c;已经部署了nginx应用&#xff0c;需要使用elk来收集日志。 注意&#xff1a;elk并没有放在k8s集群中&#xff0c;使用单独的服务器进行安装。不推荐elk放在k8s集群中&#xff01; 其中filebeat&#xff0c;使用DaemonSet方式部署&#xff0…

【递归函数的几种常见题型】

递归函数的几种常见题型 目录 题型一&#xff1a;打印一个数的每一位 题型二&#xff1a;计算一个数的每位之和 题型三&#xff1a;计算n的k次方 题型一&#xff1a;打印一个数的每一位 1.1递归函数的实现 void print(int n) {if (n > 9)print(n / 10);printf("…

海外ASO优化之关于应用的营销1

应用程序市场存在一个悲惨的现实&#xff1a;再优秀的应用程序仍然可能会失败。这通常是因为没有人知道它们的存在。所以应用的营销是取得成功的关键。 1、选择正确的应用名称。 实用的应用程序的销售基础是以某种方式使用户的生活更轻松&#xff0c;所以我们需要设置一些功能…

浦东优秀解决方案!闪马智能加速赋能数字化转型

近日&#xff0c;由上海市浦东新区城市数字化转型应用促进中心和上海数字产业发展有限公司联合主办的2023年浦东新区“数转汇”品牌活动启动仪式暨上海数产“科技下午茶”活动举行。现场“2022年浦东新区数字化转型应用优秀解决方案”正式发布&#xff0c;凭借智慧交通一体化感…

深入解析搜好货API:开启智能化电商解决方案

随着电商行业的快速发展&#xff0c;人们对于个性化、智能化的购物体验的追求也越来越高。为了满足消费者的需求&#xff0c;搜好货API应运而生。 一、搜好货API的基本原理 搜好货API基于先进的数据挖掘和机器学习算法&#xff0c;通过收集和分析大量的商品信息和用户行为数据…

[保研/考研机试] KY3 约数的个数 清华大学复试上机题 C++实现

题目链接&#xff1a; KY3 约数的个数 https://www.nowcoder.com/share/jump/437195121691716950188 描述 输入n个整数,依次输出每个数的约数的个数 输入描述&#xff1a; 输入的第一行为N&#xff0c;即数组的个数(N<1000) 接下来的1行包括N个整数&#xff0c;其中每个…

golang拥有wireshark数据包解析能力

golang拥有wireshark数据包解析能力 1. 功能和实现 wireshark拥有世界上最全面的协议解析能力并且还在不断更新中&#xff0c;通过调研&#xff0c;没有办法找到与wireshark同水平的解析工具。 为了使得golang语言可以拥有wireshark一样强大的协议解析能力&#xff0c;库 gowir…

嗨,你的MySQL性能瓶颈在这!

MySQL的高级用法和性能优化 1. MySQL的高级用法1.1 replace into 用法1.2 内连接&#xff08;inner join&#xff09;1.2.1 等值连接1.2.2 非等值连接1.2.3 左连接1.2.4 右连接 1.3 索引1.3.1 索引的概念1.3.2 索引的分类1.3.3 索引的优点1.3.4 索引的缺点1.3.5 索引的使用场景…

高级身份威胁检测系统可检测拦截攻防演练漏洞

近期将迎来大型攻防演练活动。随着各种实战攻防演练活动和红队&#xff08;攻击队&#xff09;利用 0-Day 及 N-Day 漏洞频繁攻击&#xff0c;甲方的蓝队&#xff08;防守队&#xff09;会出现应接不暇。攻击队为了拿到靶机完成演习目的&#xff0c;一定会拿出最先进的攻击手段…

侯捷 C++ part2 兼谈对象模型笔记——4 specialization 特化

4. specialization 特化 4.1 全特化 full specialization 模板是泛化&#xff0c;特化是泛化的反面&#xff0c;可以针对不同的类型&#xff0c;来设计不同的东西 其语法为template<> struct xxx<type> template<> struct hash<char> { ...size_t …