Qt5开发及实例V2.0-第九章-Qt文件及磁盘处理

news2025/2/27 2:02:19

Qt5开发及实例V2.0-第九章-Qt文件及磁盘处理

  • 第9章 Qt 5文件及磁盘处理
    • 9.1 读写文本文件
      • 9.1.1 QFile类读写文本
      • 9.1.2 QTextStream类读写文本
    • 9.2 读写二进制文件
    • 9.3 目录操作与文件系统
      • 9.3.1 文件大小及路径获取实例
      • 9.3.2 文件系统浏览
    • 9.4 获取文件信息
    • 9.5 监视文件和目录变化
  • 本章相关例程源码下载
    • 1.Qt5开发及实例_CH901.rar 下载
    • 2.Qt5开发及实例_CH902.rar 下载
    • 3.Qt5开发及实例_CH903.rar 下载
    • 4.Qt5开发及实例_CH904.rar 下载
    • 5.Qt5开发及实例_CH905.rar 下载
    • 6.Qt5开发及实例_CH906.rar 下载
    • 7.Qt5开发及实例_CH907.rar 下载

第9章 Qt 5文件及磁盘处理

9.1 读写文本文件

9.1.1 QFile类读写文本

【例】(简单)(CH901)建立基于控制台工程,使用QFile类读写文本文件。
实现步骤如下。
(1)建立一个工程。选择“文件”→“新建文件或项目…”菜单项,在弹出的对话框中选择“项目”组下的“Application”→“ Qt Console Application”菜单项,单击“Choose…”按钮。
(2)在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名为“TextFile”,单击“下一步”按钮,再次单击“下一步”按钮,最后单击“完成”按钮,完成该文件工程的建立。

(3)源文件“main.cpp”的具体实现代码如下:

#include <QCoreApplication>
#include <QFile>
#include <QtDebug>
int main(int argc, char *argv[])
{	
    QCoreApplication a(argc, argv);
    QFile file("textFile1.txt");					//(a)
    if(file.open(QIODevice::ReadOnly))				//(b)
    {
       char buffer[2048];
       qint64 lineLen = file.readLine(buffer,sizeof(buffer));			//(c)
       if(lineLen!=-1)						//(d)
       {
           qDebug()<<buffer;
       }
    }
    return a.exec();
}

(4)选择“构建”→“构建项目" TextFile "”菜单项,首先编辑本例所用的文本文件“textFile1.txt”,保存在项目D:\Qt\CH9\CH901\build-TextFile-Desktop_Qt_5_8_0_MinGW_32bit-Debug目录下,然后运行程序,运行结果如图9.1所示。
在这里插入图片描述

9.1.2 QTextStream类读写文本

【例】(简单)(CH902)建立基于控制台的工程,使用QTextStream类读写文本文件。
(1)源文件“main.cpp”的具体实现代码如下:

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile data("data.txt");
    if(data.open(QFile::WriteOnly|QFile::Truncate))		//(a)
    {
        QTextStream out(&data);
        out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;									//(b)
    }
    return a.exec();
}

其中,
(a) if(data.open(QFile::WriteOnly|QFile::Truncate)):参数QFile::Truncate表示将原来文件中的内容清空。输出时将格式设为左对齐,占10个字符位置。
(b) out<<QObject::tr(“score:”)<<qSetFieldWidth(10)<<left<<90<<endl:用户使用格式化函数和流操作符设置需要的输出格式。其中,qSetFieldWidth()函数是设置字段宽度的格式化函数。除此之外,QTextStream还提供了其他一些格式化函数,见表9.1。
在这里插入图片描述
其中,left操作符是QTextStream定义的类似于中的流操作符。QTextStream还提供了其他一些流操作符,见表9.2。
在这里插入图片描述

(2)运行此程序后,可以看到在项目的D:\Qt\CH9\CH902\build-TextFile2-Desktop_Qt_5_8_0_MinGW_32bit-Debug文件夹下自动建立了一个文本文件“data.txt”,打开后看到的内容如图9.2所示。
在这里插入图片描述

9.2 读写二进制文件

【例】(简单)(CH903)使用QDataStream读写二进制文件。
(1)头文件“mainwindow.h”的具体代码如下:

#include <QMainWindow>
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void fileFun();
};

(2)源文件“mainwindow.cpp”的具体代码如下:

#include "mainwindow.h"
#include <QtDebug>
#include <QFile>
#include <QDataStream>
#include <QDate>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    fileFun();
}

函数fileFun()完成主要功能,其具体代码如下:

void MainWindow::fileFun()
{
    /*将二进制数据写到数据流 */		//(a)
    QFile file("binary.dat");
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    QDataStream out(&file);                         	//将数据序列化
    out << QString(tr("周何骏:"));                   	//字符串序列化
    out << QDate::fromString("1996/09/25", "yyyy/MM/dd");
    out << (qint32)21;                                 	//整数序列化
    file.close();
    /*从文件中读取数据 */			//(b)
    file.setFileName("binary.dat");
    if(!file.open(QIODevice::ReadOnly))
    {
         qDebug()<< "error!";
         return;
    }
    QDataStream in(&file);                        		//从文件中读出数据
    QString name;
    QDate birthday;
    qint32 age;
    in >> name >> birthday >> age;               	//获取字符串和整数
    qDebug() << name << birthday << age;  
    file.close();
}

(3)运行结果如图9.3所示。
在这里插入图片描述

9.3 目录操作与文件系统

9.3.1 文件大小及路径获取实例

【例】(难度一般)(CH904)得到一个文件的大小和所在的目录路径。
源文件“main.cpp”的具体代码。
运行结果如图9.4所示。
在这里插入图片描述
本例项目编译后生成的文件所在的目录是:
D:/Qt/CH9/CH904/build-dirProcess-Desktop_Qt_5_8_0_MinGW_32bit-Debug
该目录下debug文件夹大小为801KB,release文件夹大小为0B(空),编译生成的整个目录的总大小为865KB。

9.3.2 文件系统浏览

【例】(难度一般)(CH905)文件系统的浏览。
创建工程FileView.pro,具体内容如下。
(1)在头文件“fileview.h”中,类FileView继承自QDialog类,具体代码。
(2)源文件“fileview.cpp”的具体代码。
槽函数slotShow()实现了显示目录dir下的所有文件,具体内容如下:

void FileView::slotShow(QDir dir)
{
    QStringList string;
    string<<"*";
    QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst);								//(a)
    showFileInfoList(list);
}

其中,
(a) QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst):QDir的entryInfoList()方法是按照某种过滤方式获得目录下的文件列表。其函数原型如下:

QFileInfoList  QDir::entryInfoList
(
     const QStringList &nameFilters,		
           //此参数指定了文件名的过滤方式,如“*”,“.tar.gz”
     Filters filters=NoFilter,    		
           //此参数指定了文件属性的过滤方式,如目录、文件、读写属性等
     SortFlags sort=NoSort       			
           //此参数指定了列表的排序情况
)const

其中,QDir::Filter定义了一系列的过滤方式,见表9.3。
在这里插入图片描述

QDir::SortFlag定义了一系列排序方式,见表9.4。
在这里插入图片描述
函数showFileInfoList()实现了用户可以双击浏览器中显示的目录进入下一级目录,或单击“…”返回上一级目录,顶部的编辑框显示当前所在的目录路径,列表中显示该目录下的所有文件。其具体代码。
槽函数slotDirShow()根据用户的选择显示下一级目录的所有文件。其具体实现代码内容如下:

void FileView::slotDirShow(QListWidgetItem * item)
{
    QString str=item->text();			//将下一级的目录名保存在str中
    QDir dir;					//定义一个QDir对象
    dir.setPath(fileLineEdit->text());  //设置QDir对象的路径为当前目录路径
    dir.cd(str)			//根据下一级目录名重新设置QDir对象的路径
    fileLineEdit->setText(dir.absolutePath());	//(a)
    slotShow(dir);			//显示当前目录下的所有文件
}

(3)运行结果如图9.5所示。
在这里插入图片描述

9.4 获取文件信息

【例】(简单)(CH906)利用QFileinfo类获得文件信息,如图9.6所示。
在这里插入图片描述
工程FileInfo.pro的具体内容如下。
(1)在头文件“fileinfo.h”中,类FileInfo继承自QDialog类,此类中声明了用到的各种相关控件和函数,其具体内容。
(2)源文件“fileinfo.cpp”的具体内容。
槽函数slotFile()完成通过标准文件对话框获得所需要文件的文件名功能,其具体内容如下:

void FileInfo::slotFile()
{
    QString fileName = QFileDialog::getOpenFileName(this,"打开","/", "files (*)");
    fileNameLineEdit->setText(fileName);
}

槽函数slotGet()通过QFileInfo获得具体的文件信息,其具体内容。
(3)运行结果如图9.6所示。

9.5 监视文件和目录变化

【例】(简单)(CH907)监视指定目录功能,介绍如何使用QFileSystemWatcher。
工程fileWatcher.pro的具体内容如下:
(1)在头文件“watcher.h”中,类Watcher继承自QWidget类,其具体内容如下:

#include <QWidget>
#include <QLabel>
#include <QFileSystemWatcher>
class Watcher : public QWidget
{
    Q_OBJECT
public:
    Watcher(QWidget *parent = 0);
    ~Watcher();
public slots:
    void directoryChanged(QString path);
private:
    QLabel *pathLabel;
    QFileSystemWatcher fsWatcher;
};

(2)源文件“watcher.cpp”的具体内容。
响应函数directoryChanged()使用消息对话框提示用户目录发生了改变,具体实现代码如下:

void Watcher::directoryChanged(QString path)
{
    QMessageBox::information(NULL,tr("目录发生变化"),path);
}

(3)运行结果如图9.7所示。
在这里插入图片描述



本章相关例程源码下载

1.Qt5开发及实例_CH901.rar 下载

Qt5开发及实例_CH901.rar

2.Qt5开发及实例_CH902.rar 下载

Qt5开发及实例_CH902.rar

3.Qt5开发及实例_CH903.rar 下载

Qt5开发及实例_CH903.rar

4.Qt5开发及实例_CH904.rar 下载

Qt5开发及实例_CH904.rar

5.Qt5开发及实例_CH905.rar 下载

Qt5开发及实例_CH905.rar

6.Qt5开发及实例_CH906.rar 下载

Qt5开发及实例_CH906.rar

7.Qt5开发及实例_CH907.rar 下载

Qt5开发及实例_CH907.rar

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

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

相关文章

由于数字化转型对集成和扩展性的要求,定制化需求难以满足,百数低代码服务商该如何破局?

当政策、技术环境的日益成熟&#xff0c;数字化转型逐步成为企业发展的必选项&#xff0c;企业数字化转型不再是一道选择题&#xff0c;而是决定其生存发展的必由之路。通过数字化转型升级生产方式、管理模式和组织形式&#xff0c;激发内生动力&#xff0c;成为企业顺应时代变…

Nacos服务列表有服务,但是配置列表不起作用。

目录 bug现场解决思路POM文件启动日志排查完整pom文件nacos配置中心部署流程 想要重新再写一下springcloud alibaba 的组件配置&#xff0c;再另一个服务renren-product引入&#xff0c;nacos的注册发现和配置中心。前面都很顺利但是修改配置中心配置的时候不起作用&#xff01…

Spring Boot实现对超大文件进行异步压缩下载

在Web应用中&#xff0c;文件下载功能是一个常见的需求&#xff0c;特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API&#xff0c;通过该API&#xff0c;用户可以下载问价为ZIP压…

linux下CentOS安装mysql-5.7

linux下安装mysql只需要在root用户下安装&#xff0c;普通用户也能使用 1.检查&#xff1a; 通过以下两条命令查看改系统下是否已存在mysql。 ps ajx | grep mysql ps ajx | grep mariadb通过指令如果只显示如下两条信息&#xff0c;则当前系统下不存在MySQL。 就可以直接进…

蓝牙电话之HFP—电话音频

1 媒体音频&#xff1a; 播放蓝牙音乐的数据&#xff0c;这种音频对质量要求高&#xff0c;数据发送有重传机制&#xff0c;从而以l2cap的数据形式走ACL链路。编码方式有&#xff1a;SBC、AAC、APTX、APTX_HD、LDAC这五种编码方式&#xff0c;最基础的编码方式是SBC&#xff0…

手撕二叉树

前序遍历构建二叉树 二叉树的销毁 二叉树的结点个数 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点 二叉树前序遍历 二叉树中序遍历 二叉树后序遍历 二叉树的层序遍历 判断二叉树是否是完全二叉树 完整代码 test.c #define _CRT_SECURE_NO_WARNINGS 1#incl…

网络防御--防火墙

拓扑 Cloud 1 作为电脑与ENSP的桥梁 防火墙配置 登录防火墙 配置IP地址及安全区域 添加地址对象 配置策略 1、内网可以访问服务器 结果 2、内网可以访问公网 结果 配置NAT策略 结果

注入之SQLMAP(工具注入)

i sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞&#xff0c;其广泛的功能和选项包括数据库指纹&#xff0c;枚举&#xff0c;数据库提权&#xff0c;访问目标文件系统&#xff0c;并在获取操作权限时执行任…

【Java 基础篇】Java多线程编程详解:线程创建、同步、线程池与性能优化

Java是一门强大的编程语言&#xff0c;其中最引人注目的特性之一是多线程支持。多线程允许我们在同一程序中同时执行多个任务&#xff0c;这大大提高了应用程序的性能和响应能力。本文将深入介绍Java线程的基础知识&#xff0c;无论您是初学者还是有一些经验的开发人员&#xf…

Qt5开发及实例V2.0-第八章-Qt模型/视图结构

Qt5开发及实例V2.0-第八章-Qt模型/视图结构 第8章 Qt 5模型/视图结构8.1 概述8.1.1 基本概念8.1.2 【实例】&#xff1a;模型/视图类使用 8.2 模型&#xff08;Model&#xff09;8.3 视图&#xff08;View&#xff09;8.4 代理&#xff08;Delegate&#xff09; 本章相关例程源…

2023.9.19 关于 数据链路层 和 DNS 协议 基本知识

目录 数据链路层 MTU DNS 协议 补充 DHCP协议 数据链路层 基本概念&#xff1a; 考虑相邻两个节点之间的传输&#xff08;通过 网线 / 光纤 / 无线 直接相连的两个设备&#xff09;以太网协议 规定了 数据链路层 和 物理层 的内容 IP地址 与 mac地址 的相互配合 IP地址 描…

ardupilot的编译过程

环境 树莓派4b ubuntu20.04 git 2.25.1 python3.8.10 pixhawk2.4.8 下载源码 &#xff08;已经配置好git环境和ssh&#xff09; git clone --recurse-submodules gitgithub.com:ArduPilot/ardupilot.gitcd ardupilotgit status使用git status检查是否下载完整 如果不完整&a…

Nuxt 菜鸟入门学习笔记:路由

文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址&#xff1a; https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…

hadoop测试环境sqoop使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Sqoop看这篇文章就够了_must contain $conditions in where clause._SoWhat1412的博客-CSDN博客 大数据环境 C:\Windows\System32\drivers\etc 修改ip和hostname的对应关系 1…

将本地项目上传至Github详解

目录 1 前言2 本地代码上传2.1 命令行方法2.2 图形界面法2.3 结果 1 前言 GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub 。开发者常常将github作为代码管理平台&#xff0c;方便代码存储、版本…

统计物理学复习----热力学的基本规律

General Laws of thermodynamics 热力学系统常识 单位制 1大气压强 101325 Pa 基本概念与专业英语 状态参量 pressurevolumetemperature Extensive quantityIntensive quantityMechanicalVPThermal ST Helmholtz Free EnergyEnthalpyInternal EnergyGibbs Free Energy 准…

ChunJun(OldNameIsFlinkX)

序言 ChunJun主要是基于Flink实时计算框架,封装了不同数据源之间的数据导入与导出功能.我们只需要按照ChunJun的要求提供原始与目标数据源的相关信息给Chunjun,然后它会帮我们生成能运行与Flink上的算子任务执行,这样就避免了我们自己去根据不同的数据源重新编辑读入与读出的方…

模块化开发_php中使用redis

redis 介绍和安装 redis数据库&#xff0c;支持数据持久化&#xff0c;常用与分布式锁&#xff0c;支持事务&#xff0c;持久化&#xff0c;非关心型数据库 区别&#xff1a; 关系型数据库&#xff1a;硬盘&#xff0c;安全&#xff0c;结构简单&#xff0c;易于理解,浪费空间…

Mac环境下jupyter添加nbextension插件

1、没有插件的状态 2、在窗口运行命令 pip install jupyter_contrib_nbextensions 安装成功 3、添加 jupyter contrib nbextension install --user 运行后 报错 No module named notebook.base 更新版本后再添加 pip install jupyter notebook6.1.0 jupyter contrib nb…

vim缓存-交换文件

Catf1agCTF靶场 web swp 题目链接&#xff1a;http://catf1ag.cn/ 个人博客&#xff1a;https://sword-blogs.com/ 题目考点&#xff1a; vim在编辑文档的过程中如果异常退出&#xff0c;会产生缓存文件 vim 交换文件名 参考文章&#xff1a;vim手册 https://yianwillis.…