第一天复习Qt文件读取

Qt文件操作:

1、QFile QTextStream操作文件案例:
1、打开文件
QFile file(absolute filepath | relative path);
file.readLine()返回内容长度,如果为-1就是读取失败
file. Close()读取后关闭
file.errorString()返回文件打开发生的错误
2、文件写入
    //文件写入
    double dPi = 3.1415926;
    int age = 13;
    QFile dataFile;
    dataFile.setFileName(R"(P:\Qt_study_rebegin\Qt_basic\01_basic_lesson\project01\src\build-qiniu_016-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\debug\data.txt)");
    // 检查文件是否存在
    if (!dataFile.exists()) {
        // 文件不存在,创建文件
        if (dataFile.open(QIODevice::WriteOnly)) {
            qDebug() << "File created successfully.";

            // 创建一个QTextStream对象out,并将其关联到dataFile文件上
            QTextStream out(&dataFile);

            // 设置实数(浮点数)的输出精度为3位小数
            out.setRealNumberPrecision(3);

            // 设置字段宽度为10个字符,写入的数据将按照10个字符的宽度进行排列
            out.setFieldWidth(10);

            // 设置字段对齐方式为右对齐,写入的数据将在字段宽度内右对齐显示,左侧留有空格填充
            out.setFieldAlignment(QTextStream::AlignRight);

            out<<QString("PI: ")
                <<scientific
                <<left
                <<dPi
                <<hex
                <<Qt::showbase
                <<uppercasebase
                <<age;
            dataFile.close();
        } else {
            qDebug() << "Failed to create file.";
        }
    } else {
        qDebug() << "File already exists.";
    }

3、文件存储并输出
    QFile binfile("info.txt");
    if(binfile.open(QIODevice::WriteOnly|QIODevice::Truncate))
    {
        // 创建一个数据流对象,并将其关联到文件上
        QDataStream out(&binfile);

        // 写入数据到数据流中
        out << QString("易烊千玺")  // 字符串数据
            << QDate::fromString("2000-11-28","yyyy-MM-dd")  // 日期数据
            << (qint32)19;  // 整数数据

        // 关闭文件
        binfile.close();
    }
    else
    {
        // 输出错误信息
        qDebug() << binfile.errorString();
    }

    // 设置文件名为 info.txt
    binfile.setFileName("info.txt");

    // 以只读方式打开文件
    if(binfile.open(QIODevice::ReadOnly))
    {
        // 创建一个数据流对象,并将其关联到文件上
        QDataStream in(&binfile);

        // 定义变量用于存储读取的数据
        QString name;
        QDate birthday;
        qint32 age;

        // 从数据流中读取数据
        in >> name >> birthday >> age;

        // 关闭文件
        binfile.close();

        // 输出读取的数据
        qDebug() << "Name:" << name;
        qDebug() << "Birthday:" << birthday.toString("yyyy-MM-dd");
        qDebug() << "Age:" << age;
    }
    else
    {
        // 输出错误信息
        qDebug() << binfile.errorString();
    }

s输出结果

2、QFileInfo类获取文件信息
// 计算目录大小的递归函数
qint64 Widget::calculateDirSize(const QString &dirPath) {
    qint64 totalSize = 0;

    // 创建 QDir 对象并设置过滤器
    QDir dir(dirPath);
    dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);

    // 获取目录下的文件和子目录信息列表
    QFileInfoList fileInfoList = dir.entryInfoList();

    // 遍历文件和子目录信息列表
    for (const QFileInfo &info : fileInfoList) {
        // 如果是文件,则累加文件大小
        if (info.isFile()) {
            totalSize += info.size();
        }
        // 如果是子目录,则递归调用计算目录大小函数,并累加子目录大小
        else if (info.isDir()) {
            totalSize += calculateDirSize(info.filePath());
        }
    }

    return totalSize;
}

// 获取文件信息并显示在界面上的函数
void Widget::getFileInfo(QString &filename) {
    // 创建 QFileInfo 对象获取文件/目录信息
    QFileInfo info(filename);

    // 根据文件类型获取大小,如果是目录则调用计算目录大小函数
    qint64 size = info.isDir() ? calculateDirSize(filename) : info.size();
    QDateTime createtime = info.created();
    QDateTime lasttime = info.lastModified();
    QDateTime lastrtime = info.lastRead(); // 最后一次访问

    // 获取文件属性信息
    bool isdir = info.isDir();
    bool isfile = info.isFile();
    bool islink = info.isSymLink();
    bool ishidden = info.isHidden();
    bool isread = info.isReadable();
    bool iswrite = info.isWritable();
    bool isexcute = info.isExecutable();

    // 将文件信息显示在界面上
    ui->size->setText(QString::number(size));
    ui->create->setText(createtime.toString());

    ui->dir->setChecked(isdir); // 设置目录选中状态
}

// 浏览按钮点击事件的处理函数
void Widget::on_browsebtn_clicked() {
    // 弹出文件选择对话框选择目录
    QString path = QFileDialog::getExistingDirectory(this, "选择目录", ",");
    ui->name->setText(path); // 在界面上显示选择的目录路径
    getFileInfo(path); // 获取目录信息并显示在界面上
}

效果展示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何购买阿里云99计划的ECS云服务器?99元购买阿里云2核2G3M服务器教程

阿里云助力中小企业和开发者无忧上云的“99计划”中有两款性价比超高的ECS云服务器&#xff0c;2026年3月31日活动结束前新购和续费价格一样。 其中个人和企业新老用户同享的2核2G3M服务器仅需99元/年&#xff08;续费同价&#xff09;&#xff0c;企业新老用户同学的2核4G5M仅…

外贸企业6大客户开发渠道优缺点全面解析 | 箱讯科技国际贸易综合服务平台

一、展会的重要性 展会&#xff0c;作为历史悠久的客户开发渠道&#xff0c;一直备受企业推崇。它汇聚了来自不同行业的企业&#xff0c;为大家提供了一个集中展示产品和技术的大舞台。在没有互联网的年代&#xff0c;展会几乎成为外贸交易的核心媒介。至今&#xff0c;它依然…

射频无源器件之巴伦

一. 巴伦的作用 Balun,balanced-unbalanced的缩写,即平衡-不平衡转换器,是一种三端口无源器件,其本质是通过电感线圈的相互耦合实现的信号转换。用于平衡信号(差分信号,即振幅相等、相位相差180 的两个信号)与非平衡信号(单端信号)的相互转换。 Balun是高频电路重要器…

《编译原理》阅读笔记:p1-p3

《编译原理》学习第 1 天&#xff0c;p1-p3总结&#xff0c;总计 3 页。 一、技术总结 1.compiler(编译器) p1, But, before a program can be run, it first must be translated into a form in which it can be executed by a computer. The software systems that do thi…

水面垃圾清理机器人的视觉算法研究

卷积神经网络是一种分层的数据表示模型&#xff0c;通常由数据输入层、卷积层、池化层、 非线性激活函数、全连接层以及输出结果预测层等组成&#xff0c;其中卷积层、池化层和非线 性激活函数是卷积神经网络中的重要组成部分。此外&#xff0c;有些模型会增加其他的层(归一 化…

16.接口自动化学习-编码处理与装饰器

1.编码和解码 编码&#xff1a;将自然语言翻译成计算机可以识别的语言 hello–01010 解码&#xff1a;将机器识别的语言翻译成自然语言 2.编码格式 UTF-8 GBK unicode 3.编码操作 #编码操作str1"hello呀哈哈哈"str2str1.encode(gbk)print(str2)print(type(str2))…

面试笔记——多线程使用场景

线程池使用场景&#xff08;CountDownLatch&#xff0c; Future&#xff09; CountDownLatch CountDownLatch&#xff08;闭锁/倒计时锁&#xff09;用来进行线程同步协作&#xff0c;等待所有线程完成倒计时&#xff08;一个或者多个线程&#xff0c;等待其他多个线程完成某件…

漏扫神器Invicti V2024.4.0专业版

前言 Invicti Professional是Invicti Security公司推出的一个产品&#xff0c;它是一种高级的网络安全扫描工具。Invicti Professional旨在帮助组织发现和修复其网络系统中的潜在安全漏洞和弱点。它提供了全面的漏洞扫描功能&#xff0c;包括Web应用程序和网络基础设施的漏洞扫…

2024 GESP6级 编程第一题 游戏

题目描述 你有四个正整数 &#xff0c;并准备用它们玩一个简单的小游戏。 在一轮游戏操作中&#xff0c;你可以选择将 减去 &#xff0c;或是将 减去 。游戏将会进行多轮操作&#xff0c;直到当 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作…

[微信小程序] 入门笔记1-滚动视图组件

[微信小程序] 入门笔记1-滚动视图组件 1.页面&组件&渲染 在小程序是由一个个页面page组成, 而页面又是由一个个组件component组成.和网页类似,这里的组件指的就是输入框<input>,按钮<button>,文本<text>,图片<image>等元素.如果你学过网页一…

;【排列【

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

ethercat :推荐一个不错的ethercat主从站开源项目

一、引言 最近在研究EtherCAT,也极有兴趣想要搞通整个底层协议&#xff0c;将来有机会搞自己的软件EtherCAT产品。这里推荐一个不错的开源项目&#xff0c;与志同道合的朋友共同学习。 Ethercat-master 主站地址&#xff1a;https://github.com/OpenEtherCATsociety/SOEM Eth…

记一次DNS故障导致用户无法充值的问题(上)

背景&#xff1a; 刚刚过去了五一劳动节&#xff0c;回来后一上班接到客服运营团队反馈的节日期间的问题&#xff0c;反馈有部分用户无法充值。拿到的反馈资料有&#xff1a; 无法充值操作视频、问题时间、手机机型、手机网络情况。 1、从视频中看到用户点击支付后没有任何反…

DRF视图基类使用方法

【 一 】drf之请求 请求对象Request 【 0 】前言 ​ 在 Python 中&#xff0c;通常通过 request 对象来处理 HTTP 请求&#xff0c;尤其是在 web 开发中&#xff0c;比如使用 Django、Flask 等框架时会经常接触到这个对象。request 对象是框架提供的&#xff0c;用于封装客户…

[附源码]秦时明月6.2魔改版_搭建架设教程_附GM工具_安卓苹果

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 一. 演示视频 秦时明…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 &#xff0c;什么是适配器&#xff1f;比如充电器就叫做电源适配器&#xff0c;用在做转换&#xff0c;对电压进行相关的转换适配我们的设备。栈&#xff0c;队列不是自己直接管理数据&#xff0c;是让其他容器管理数据&a…

缓存雪崩、击穿、击穿

缓存雪崩&#xff1a; 就是大量数据在同一时间过期或者redis宕机时&#xff0c;这时候有大量的用户请求无法在redis中进行处理&#xff0c;而去直接访问数据库&#xff0c;从而导致数据库压力剧增&#xff0c;甚至有可能导致数据库宕机&#xff0c;从而引发的一些列连锁反应&a…

【linux】进程概念|task_struct|getpid|getppid

目录 ​编辑 1.进程的概念 进程的基本概念 进程与程序的主要区别 进程的特征 进程的状态 描述进程—PCB task_struct中的内容 查看进程 1.创建一个进程&#xff0c;运行以下代码 通过系统调用获取进程标示符 getpid()以及getppid() 1.进程的概念 进程的基本概念…

JRT失控处理打印和演示

基于JRT完备的脚本化和打印基础&#xff0c;基于JRT的业务可以轻松的实现想要的打效果&#xff0c;这次以质控图的失控处理打印和月报打印来分享基于JRT的打印业务实现。 演示视频链接 失控报告打印 失控处理打印的虚拟M import JRT.Core.DataGrid.GridDto; import JRT.Co…

微信小程序开发-数据事件绑定

&#x1f433;简介 数据绑定 数据绑定是一种将小程序中的数据与页面元素关联起来的技术&#xff0c;使得当数据变化时&#xff0c;页面元素能够自动更新。这通常使用特定的语法&#xff08;如双大括号 {{ }}&#xff09;来实现&#xff0c;以便在页面上展示动态数据。 事件绑…
最新文章