Qt第十三章 目录和文件操作

news2024/12/24 9:49:33

目录和文件操作

文章目录

  • 目录和文件操作
    • 设备I/O
      • 简介
      • I/O设备的类型
      • 基本文件读写
        • QFile
        • QTemporaryFile
      • 流操作
        • QTextStream
        • QDataStream
      • QFileInfo
      • QDir
      • QFileSystemWatcher
      • QStandardPaths
      • QSettings

设备I/O

简介

I/O设备的类型

基本文件读写

QFile
    QFile file("C:/Users/PVer/Documents/123.txt");
    if (!file.open(QFile::ReadOnly)) {
        qWarning() << "文件打开失败";
        return;
    }
    while (!file.atEnd()) {
        // qDebug() << file.readLine(); // 按行读取,会把\t\r\n等转义字符读取进去
        char c;
        file.getChar(&c); // 单个字符读取
        qDebug() << c;
    }
    bool b = file.rename("abc.txt"); // 重命名,重命名的文件在当前工程Debug文件夹里面,原文件删除
    if (b) {
        qDebug() << file.fileName(); // 如果改名成功,显示当前文件名abc.txt
        file.copy("abc.txt", "C:/Users/PVer/Documents/123.txt"); // 把文件拷贝回去
    }
    file.remove(); // 如果之前重命名成功了,就是移除abc.txt,如果没重命名成功,就是删除123.txt了
    file.close(); // 关闭文件,发出了信号,但是要等待系统关闭才关闭
    qDebug() << file.fileName(); // 这里输出abc.txt
    QFile file1("C:/Users/PVer/Documents/123.txt");
    if (!file1.open(QFile::ReadWrite)) {
        qWarning() << "打开123失败";
        return;
    }
    file1.write("这是新增的内容"); // 写入新内容
    file1.close();
    file1.copy("C:/Users/PVer/Documents/123.txt", "cde.txt"); // 如果上一行关闭文件不执行,拷贝的是之前没修改的文件,如果执行了,拷贝的修改后的文件
QTemporaryFile
    QTemporaryFile file("123.txt"); // 创建临时文件
    if (!file.open()) {
        qDebug() << "文件打开失败";
        return;
    }
    qInfo() << file.fileName(); // 全局文件名,每次创建的名字不一样,会在后面加随机字符
    qInfo() << file.fileTemplate(); // 获取临时文件的位置,相对位置

    file.write("1234");
    //file.setAutoRemove(false); // 设置临时文件默认不移除,如果不设置,程序结束自动移除

流操作

QTextStream
    QFile file("C:/Users/PVer/Documents/123.txt");
    if (!file.open(QFile::ReadWrite)) {
        qWarning() << "文件打开失败";
        return;
    }
    QTextStream ts(&file);
    // qInfo() << ts.readLine(); // 按行读取
    // qInfo() << ts.read(100); // 读取100个字节
    // ts << 2024 << '\n'
    //    << 2.33 << '\n'
    //    << "abc" << '\n';
    int a;
    QString str;
    float b;
    ts >> a >> b >> str;
    qDebug() << a << b << str;
QDataStream
    QByteArray arr;
    QDataStream dt(&arr, QIODevice::ReadWrite);
    int a;
    dt << 1;
    qDebug() << arr; // 运行结果"\x00\x00\x00\x01"

QFileInfo

    QFileInfo fi("G:/Qt/MaintenanceTool.exe");
    if (!fi.exists())
        return;
    qInfo() << fi.path(); //"G:/Qt"
    qInfo() << fi.fileName(); //"MaintenanceTool.exe"
    qInfo() << fi.baseName(); //"MaintenanceTool"

QDir

    QDir dir("G:/Qt");
    qDebug() << dir.exists();
    if (!dir.exists())
        return;
    dir.setFilter(QDir::NoDotAndDotDot | QDir::Files); // 排除.和..文件
    qDebug() << dir.count(); // 输出包含文件数量
    QFileInfoList fLst = dir.entryInfoList(QStringList() << "*.txt"); // 获取后缀.txt文件信息
    for (auto& f : fLst)
        qDebug() << f.fileName();

QFileSystemWatcher

    QFileSystemWatcher* fsc = new QFileSystemWatcher;
    fsc->addPath("G:/abc/123.TXT");
    qDebug() << fsc->files();
    fsc->addPaths(QStringList() << "G:/abc/def"
                                << "G:/abc/dsds");
    qDebug() << fsc->directories();
    connect(fsc, &QFileSystemWatcher::fileChanged, [=] { qDebug() << "文件改变"; });
    connect(fsc, &QFileSystemWatcher::directoryChanged, [=] { qDebug() << "目录改变"; });

在这里插入图片描述

QStandardPaths

    qInfo() << QStandardPaths::displayName(QStandardPaths::DesktopLocation);
    qInfo() << QStandardPaths::findExecutable("qtcreator.exe", QStringList() << "G:/Qt/Tools/QtCreator/bin"); // 在当前文件夹中查找可执行程序
    qInfo() << QStandardPaths::locate(QStandardPaths::DocumentsLocation, "123.txt"); // 文档里面查找,找到就返回地址,找不到就是个空字符串
    qInfo() << QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); // 目录不一定存在,只是把目录作一个拼接,显示拼接的地址

QSettings

  1. 写入注册表
    QSettings setting("yerennuo", "fileTest");
    setting.setValue("size", QSize(1280, 720)); // 在注册表里保存

在这里插入图片描述

    setting.beginGroup("window"); // 在新开的组window里写入
    setting.setValue("pos", QPoint(100, 100));
    setting.endGroup();

在这里插入图片描述

   QSettings setting1("HKEY_CURRENT_USER\\SOFTWARE\\yerennuo\\fileTest", QSettings::NativeFormat);
   qDebug() << setting1.value("size").toSize(); // 获取结果QSize(1280, 720)
   qDebug() << setting1.value("window/pos").toPoint();
  1. 写入ini文件
   QSettings st("config.ini", QSettings::IniFormat);
   st.setValue("pos", QPoint(200, 200));
   st.beginGroup("window");
   st.setValue("rect", QRect(0, 0, 10, 10));
   st.endGroup();

在debug文件夹会出现一个config.ini
在这里插入图片描述

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

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

相关文章

Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递

一、技术背景 在实际的组网中&#xff0c;可能会遇到这样一个场景&#xff1a;在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备&#xff0c;使用 EIGRP 协议将网络的路由打通。但是后来网络扩容&#xff0c;增加了一批华为的设备&#…

HAL库源码移植与使用之低功耗模式

低功耗特性对用电池供电的产品&#xff1a; 更小电池体积&#xff08;降低了大小和成本&#xff09; 延长电池寿命 电磁干扰更小&#xff0c;提高无线通信质量 电源设计更简单&#xff0c;无需过多考虑散热问题 电源供电区分为&#xff1a; 分为VDD供电区…

平面五杆机构运动学仿真matlab simulink

1、内容简介 略 89-可以交流、咨询、答疑 2、内容说明 略 ] 以 MATLAB 程序设计语言为平台 , 以平面可调五杆机构为主要研究对象 , 给定机构的尺寸参数 , 列出所 要分析机构的闭环矢量方程 , 使用 MATLAB 软件中 SIMULINK 仿真工具 , 在 SIMULINK 模型窗口下建立数…

深入理解TensorFlow底层架构

目录 深入理解TensorFlow底层架构 一、概述 二、TensorFlow核心概念 计算图 张量 三、TensorFlow架构组件 前端 后端 四、分布式计算 集群管理 并行计算 五、性能优化 内存管理 XLA编译 六、总结与展望 深入理解TensorFlow底层架构 一、概述 TensorFlow是一个开…

从0开始的STM32HAL库学习8

PWM控制舵机 配置环境 1. 选择TIM2时钟 2.选择内部时钟模式&#xff0c;打开通道二 3.分频系数PSC:72-1 自动重装寄存器ARR:20000-1 输出比较寄存器 CCR:500~2500( 后面可调整 ) 脉冲选择500后期可以改 编辑代码 调用启动函数 HAL_TIM_PWM_Start(&htim2,TIM_CHANN…

一分钟图情论文:《智慧数据视角下古籍数字出版的创新路径》

由武汉大学的雷珏莹和王晓光合著的《智慧数据视角下古籍数字出版的创新路径研究》论文从智慧数据1的视角出发&#xff0c;探讨了我国古籍数字出版的现状及其发展瓶颈&#xff0c;提出了古籍数字出版在内容、形式、服务和技术四个方面的创新路径。 文中, 研究者首先详细分析了当…

使用Fiddler进行Android和IOS抓包

Android抓包 要使用Telerik Fiddler Classic捕获Android设备的网络流量&#xff0c;您需要执行以下步骤&#xff1a; 在Fiddler Classic上进行设置&#xff1a; 确保已安装并使用BouncyCastle作为证书生成器。较新的Android版本会拒绝有效期超过两年的证书&#xff0c;目前只…

构建本地智能知识问答系统:基于Langchain和ChatGLM的简单实践

在数字化时代&#xff0c;智能知识问答系统成为了提升企业效率和数据安全性的关键工具。本文将介绍如何基于Langchain和ChatGLM构建一个本地化、支持中文的智能知识问答系统。该系统不仅能够实现完全本地化推理&#xff0c;而且对开源模型友好&#xff0c;可满足企业对数据隐私…

Windows中修改pip下载源

目录 一. 打开此电脑或文件管理器&#xff0c;输入 %APPDATA% 回车跳转 二. 在此目录中新建一个文件夹命令为pip 三. 进入这个目录&#xff0c;新建一个pip.ini文件 四. 复制阿里云镜像配置 五. CMD终端下载验证 六. 常用的国内镜像网站 一. 打开此电脑或文件管理器…

编程中的智慧六:单例、原型、建造者

上一篇咱们结合Spring介绍了设计模式中的工厂模式相关方法&#xff0c;其实现在Java开发基本上都是基于Spring框架开发&#xff0c;所以后续我们在开发过程中基本上很少自己重写一个工厂模式&#xff0c;都是直接使用Spring来完成。今天咱们接着看剩下的创建型设计模式&#xf…

配置VS+VLC并播放视频

文章目录 前言配置VSVLCVLC播放视频基本流程1. libvlc_new2. libvlc_set_user_agent3. libvlc_set_log_verbosity4. libvlc_media_new_path5. libvlc_media_player_new_from_media6. libvlc_media_player_play7. libvlc_media_player_get_state8. libvlc_media_release9. libvl…

使用9种方法隐藏和显示元素

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>使用9种方法隐藏和显示元素</title><sty…

Bash 学习摘录

文章目录 1、变量和参数的介绍&#xff08;1&#xff09;变量替换$(...) &#xff08;2&#xff09;特殊的变量类型export位置参数shift 2、引用&#xff08;1&#xff09;引用变量&#xff08;2&#xff09;转义 3、条件判断&#xff08;1&#xff09;条件测试结构&#xff08…

数据结构——栈(顺序结构)

一、栈的定义 栈是一种数据结构&#xff0c;它是一种只能在一端进行插入和删除操作的特殊线性表。这一端被称为栈顶&#xff0c;另一端被称为栈底。栈按照后进先出&#xff08;LIFO&#xff09;的原则进行操作&#xff08;类似与手枪装弹后射出子弹的顺序&#xff09;。在计算…

docker 打包orbbec

docker pull humble容器 sudo docker run -it osrf/ros:humble-desktop docker 启动容器 sudo docker run -u root --device/dev/bus/usb:/dev/bus/usb -it -v /home/wl:/share --name wl4 osrf/ros:humble-desktop /bin/bash新开一个终端 查看本地存在的容器&#xff1a;…

【Git】(基础篇六)—— 发现好项目

发现github上的好项目 在开源社区中&#xff0c;发现好的项目&#xff0c;不论是对于自己的学习&#xff0c;还是在前人的基础上继续改进&#xff0c;都十分重要&#xff0c;本文为你介绍如何在github上面找到好的项目&#xff08;gitee同理&#xff09; 关注活跃大牛 GitHu…

Spring的IoC与DI介绍

Spring基础 Spring Framework系统架构 Spring Framework是Spring生态圈中最基础的项目,是其它项目的根基。 IoC(Inversion ofControl)控制反转 使用对象时,由主动new产生对象转换为由外部提供给对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。Sprin…

Flutter 插件之 easy_refresh(下拉刷新、上拉加载)

今天给大家较少一下日常开发中最常见的一个功能,就是 下拉刷新、上拉加载,这个在我们使用分页功能是最常见的。 此前我我也写了一篇关于 下拉刷新、上拉加载。 Flutter 下拉刷新、上拉加载flutter_easyrefresh的使用https://blog.csdn.net/WangQingLei0307/article/details/…

【AI大模型】生成式AI的未来——CHAT还是AGENT?

【AI大模型】CHAt还是AGENt&#xff1f; 最近&#xff0c;许多人工智能公司或者部门都在针对Agent——人工智能体有所动作。 例如&#xff1a; 文心一言智能体 Gnomic智能体 英伟达视觉AI代理 那么人工智能概念中的智能体Agent到底是什么呢&#xff1f;它又为何会突然在人工智…

Linux存储管理-逻辑卷管理(LVM)

逻辑卷管理&#xff08;LVM&#xff09;流程 物理磁盘/分区 -> 物理卷&#xff08;PV&#xff09;-> 加入卷组&#xff08;VG&#xff09;-> 卷组调配空间&#xff0c;制作逻辑卷&#xff08;LV&#xff09;-> 格式化 -> 挂载 -> 使用 为什么需要逻辑卷管理…