qt QFile文件操作处理,QFileInfo文件信息读取的简单介绍

news2024/10/6 12:26:09

QFile类用于文件操作,对文件进行读写操作,可读写文件,二进制文件和qt资源文件.处理文本文件和二进制文件可使用QTextStream类和QDataStream类,处理临时文件可以使用QTemporary,获取文件信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher.

1.

QFile读取文件.

QIODevice::ReadOnly表示只读方式打开文件.readLine表示读取一行的字符串.失败返回-1,成功返回读取到的字节长度.

    //读取文件
    QFile  file("hello.txt");           //文件相对路径
    if(file.open(QIODevice::ReadOnly)){ //文件打开方式,只读
       
        char buffer[100]; 
        qint32 n;//本质是int类型,32位,4个字节.一个字节8个位
        //readLine()返回-1表示失败,成功则返回读取到的字节长度.
        //参数:readLine读取的数据保存位置,指定读的数据字节长度.
        n = file.readLine(buffer,sizeof(buffer));
        if(n != -1){
            qDebug()<<"长度:"<<n<<"内容:"<<buffer<<endl;
            file.close();
        }
    }else{
        qDebug()<<file.errorString();//打印文件打开失败原因
    }

2.

QFile写入文件.QTextStream操作文本文件

QFile::WriteOnly表示以写入文件方式打开文件,QFile::Truncate表示打开文件时对文件数据进行覆盖.

使用文件操作流QTextStream操作文本文件并对设置文件格式,其中setRealNumberPrecision(3)设置整数精度位数为3(即从左往右数有效数字为3个),setFieldWidth(10)设置字段宽度为10.

setFieldAlignment()函数用于设置对齐方式,它的枚举值有4个:

AlignLeft左对齐
AlignRight右对齐
AlignCenter居中对齐
AlignAccountingStyle左右两端对齐
    //写入文件
    double dPI = 3.1415926;
    int age =13;
    QFile dataFile;//QFile dataFile("data.txt");
    dataFile.setFileName("data.txt");//初始化/指定文件路径
    //与上面使用QIODevice不同的原因是:QFile继承自QIODevice
    if(dataFile.open(QFile::WriteOnly | QFile::Truncate)){//Truncate对文件数据进行覆盖

        qDebug()<<"文件打开成功"<<endl;

        QTextStream out(&dataFile);                     //文件操作流
        out.setRealNumberPrecision(3);                  //设置整数精度位数.效果同下
        out.setFieldWidth(10);                          //设置字段宽度
        out.setFieldAlignment(QTextStream::AlignRight); //设置对齐方式.右对齐


        out<<QString("PI:")<<qSetRealNumberPrecision(8) //设置整数精度位数
                           //<<qSetFieldWidth(10)         //设置字段宽度
                           //<<left                       //左对齐.
                           //<<dPI;                       //整数的精度位数,默认为6位
                           //<<bin            //设置读写整数为二进制
                           //<<hex            //设置读写整数为十六进制
                           //<<showbase       //显示进制前缀
                           //<<uppercasebase  //显示进制前缀大写

                           <<scientific      //科学计数法
                           <<dPI
                           <<age;
    }

3.

QTextStream流的操作符(可参考上面的代码)

操作符

作用描述

bin

设置读写的整数为 二进制数

oct

设置读写的整数为 八进制数

dec

设置读写的整数为十进制数

hex

设置读写的整数为十六进制数

showbase

强制显示进制前缀,如十六进制(0x)、八进制(0)、二进制(0b)

forcesign

强制显示符号(+、-)

forcepoint

强制显示小数点

noshowbase

强制不显示前缀

noforcesign

强制不显示符号

uppercasebase

显示大写的进制前缀

lowercasebase

显示小些的进制前缀

uppercasedigits

用大写字母表示

lowercasedigits

用小写字母表示

fixed

固定小数点表示

scientific

科学计数法表示

left

左对齐

right

右对齐

center

居中

endl

换行

flush

清除缓冲

 4.

QFileInfo类,可以获取文件信息.

包括文件大小size(),

文件创建时间created(),

文件最后一次修改时间lastModified(),

文件最后一次访问时间lastRead();

是否为目录isDir(),

是否为文件isFile(),

是否为连接isSymLink(),

是否隐藏文件isHidden()等等有非常多的关于文件信息的函数.

示例界面.

 代码:

使用QFileDialog::getOpenFileName()就可以打开一个模态文件对话框,对文件进行选择.选中文件,则返回一个文件名目录.

QFileDialog::getExistingDirectory()打开一个模态文件对话框,选中文件并返回一个文件目录.

    //跳出文件对话框...按钮
    void FileInfo::on_browseFileButton_clicked(){
    //弹出文件对话框.
    //fileName保存的是文件路径.获取打开的文件名,不太好测试目录
    //QString fileName = QFileDialog::getOpenFileName(this,       //指定父窗体,当前窗体对象作为父窗体
    //                                                "打开文件",  //对话框标题
    //                                                ".",        //文件打开路径(相对路径,当前路径作为默认路径)
    //                                                "files(*)"  //对文件进行过滤条件.所有文件
    //                                                );
    
    //把文件名刷新出来
    //ui->fileNameLineEdit->setText(fileName);
    //getFileInfo(fileName);
    
    
    //只显示目录不显示文件
    QString path = QFileDialog::getExistingDirectory(this,
                                                     "选择目录",
                                                     ".");
    ui->fileNameLineEdit->setText(path);
    getFileInfo(path);
}

    //获取文件信息 
    void FileInfo::getFileInfo(QString &fileName){

    //获取文件信息类(qt内部类)
    QFileInfo info(fileName);//文件路径

    qint64 size = info.size();                  //返回文件大小
    QDateTime createTime = info.created();      //返回文件创建日期
    QDateTime lastMTime = info.lastModified();  //返回最后一次修改时间
    QDateTime lastRTime = info.lastRead();      //返回最后一次访问时间

    //文件的属性信息7个
    bool bIsDir = info.isDir();             //是否为目录
    bool bIsFile = info.isFile();           //是否为文件
    bool bIsSymLink = info.isSymLink();     //文件是否为链接
    bool bIsHidden = info.isHidden();       //是否隐藏
    bool bIsReadable = info.isReadable();   //是否可读
    bool bIsWritable = info.isWritable();   //是否可写
    bool bIsExcutable = info.isExecutable();//是否为可执行文件

    //更新输入框
    ui->fileSizeLineEdit->setText(QString::number(size));//整数转为字符串
    ui->fileCreateLineEdit->setText(createTime.toString());//toString()日期转字符串
    ui->fileModifyLineEdit->setText(lastMTime.toString());
    ui->fileReadLineEdit->setText(lastRTime.toString());

    //多选按钮7个
    ui->isDirCheckBox->setChecked(bIsDir);      //判断设置是否勾选
    ui->isFileCheckBox->setChecked(bIsFile);
    ui->isSymLinkCheckBox->setChecked(bIsSymLink);
    ui->isHiddenCheckBox->setChecked(bIsHidden);
    ui->isWritableCheckBox->setChecked(bIsWritable);
    ui->isReadableCheckBox->setChecked(bIsReadable);
    ui->isExecutableCheckBox->setChecked(bIsExcutable);
}

all~~

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

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

相关文章

整合SSH(Spring+Struts+Hibernate)

0.前言, 由于工作需要故来学习SSH的整合,structs其实相当于(把view和controller结合起来,没有像现在的前后端分离,请求会发送给Action处理,在structs.xml映射地址和类) Hibernate(就是处理数据库的,几乎自动化,也可以写sql语句) Struts&#xff1a;Struts 是一个基于 MVC&#…

【Python】计算一年内的总天数(还有跨年日期)

花了一段时间才找到Python中求一年中总日数&#xff08;total day of the Year&#xff09;的格式代码&#xff0c;所以也把计算方法记录下来。 基本 首先&#xff0c;简单地找出一年中的总天数&#xff0c; strftime() 和 strptime() 的格式代码是 %j ↓看这里 使用 strft…

算法基础之Prim算法求最小生成树

Prim算法求最小生成树 核心思想&#xff1a;Prim 算法 类似于dijkstra算法 更新距离时改为到**集合(生成树)**的距离 最小生成树长这样 每次迭代放一个最近(有边)点&#xff0c;一条最短边进生成树 #include <cstring>#include <iostream>#include <algori…

08-Event Sources和Sink架构

1 PingSource -> Kubernetes Service Sink 架构模型 示例1 部署一个kubernetes类型的sink&#xff0c;这里面还是以event-display为例&#xff0c;下面是资源清单 --- apiVersion: apps/v1 kind: Deployment metadata:name: event-display spec:replicas: 1selector:matc…

Axie Infinity 之后,Ronin 的潜力何在?

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;Ronin Dashboard 备受欢迎的 Web3 游戏 Pixels 在 2023 年 10 月下旬从 Polygon 迁移到了专为游戏设计的区块链 Ronin。Pixels 此前作为 Polygon 上活跃用户&#xff08;钱包数量&#xff09;最多的 Web3 游戏&…

【重点】【DFS】【子集】78.子集

题目 法1&#xff1a;DFS 必须掌握的方法&#xff01;&#xff01;&#xff01; 我们也可以用递归来实现子集枚举。 假设我们需要找到一个长度为 nnn 的序列 aaa 的所有子序列&#xff0c;代码框架是这样的&#xff1a; void dfs(int cur, int n, LinkedList<Integer>…

HTML5+CSS3小实例:3D发光切换按钮效果

目录 一、运行效果 图片效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.创建空文件夹 2.完成页面内容 3.完成css样式 五、项目总结 六、源码获取 一、运行效果 图片效果 二、项目概述 该项目是一个基于HTML和CSS的动态小猫动画。通过使用CSS样式和动画效果…

开源支付项目,还有强大的聚合支付项目,值得借鉴学习,收藏备用

开源支付项目,还有强大的聚合支付项目,值得借鉴学习,收藏备用 自学编程之道2023-03-18 14:26 移动支付随处可见,以前都是微信、支付宝分别各一个收款码,二维码多了之后就不好管理了,随着支付方式的增多,现在基本上都用聚合支付,多种支付方式,一码搞定。针对支付及聚…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

项目管理:产品经理如何保障项目按时完成

一个项目的成功要考虑多方因素&#xff0c;即使经过了精细的策划&#xff0c;但是在项目推进过程中也会遇到各种问题。 产品经理的任务就不仅仅在于完成产品策划&#xff0c;还需要承担项目管理工作&#xff0c;跟进项目进度&#xff0c;必要时还得出面协调、解决冲突&#x…

猜数字小游戏(猜错了会关机推荐让室友帮你玩)

前言 今天来带大家写一个简易的猜数字小游戏&#xff0c;如果连着猜错n次&#xff08;自己设定&#xff09;就会导致电脑关机&#xff0c;还在等什么呢&#xff1f;赶紧学会咯&#xff0c;发给你的室友让他帮你玩吧&#xff01; 正文 随机数的生成 首先我们还要学会如何创建随…

Windows10 如何开机自动启动redis

前言 当我们在Windows 10上使用Redis时&#xff0c;通常希望能够使Redis服务在系统启动时自动启动&#xff0c;以便我们无需手动介入就能够方便地访问和管理数据。在这个过程中&#xff0c;我们将通过下载、安装和配置Redis为Windows服务的方式&#xff0c;使其成为系统的一部分…

python与机器学习4,激活函数

目录 1 激活函数1: 单位阶跃函数 1.1 函数形式 1.2 函数图形 1.3 函数特点 1.4 代码实现这个 单位阶跃函数 2 激活函数2 sigmoid函数 2.1 函数形式 2.2 函数图形 2.3 函数特点 2.3.1 是一个连续函数&#xff0c;且是一个渐变的曲线 2.3.2 是连续区间的[0,1] , 可以…

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…

定制 Electron 窗口标题栏

Electron 是一款流行的桌面应用开发框架&#xff0c;基于 Web 技术构建&#xff0c;提供了强大的跨平台能力。在开发过程中&#xff0c;经常需要定制窗口标题栏以创造独特的用户体验。 1. 完全隐藏默认标题栏 有时候&#xff0c;我们希望创建一个自定义的标题栏&#xff0c;完…

光伏收益计算工具:实现可持续能源投资的决策支持

随着全球能源结构的转型&#xff0c;光伏发电作为主要的可再生能源之一&#xff0c;其投资前景日益光明。然而&#xff0c;光伏发电项目的投资决策需要基于准确的收益预测。因此&#xff0c;光伏收益计算工具应运而生&#xff0c;为投资者提供决策支持。 光伏收益计算工具是一种…

护肤品品牌怎么创建百度百科词条?

护肤品品牌创建百度百科词条&#xff0c;需要遵循一定的步骤和原则&#xff0c;同时保证内容的真实性和权威性。以下是伯乐网络传媒给大家分享的详细创建流程和注意事项&#xff1a; 一、准备工作 收集资料&#xff1a;首先&#xff0c;需要收集品牌的详细资料&#xff0c;包括…

【Matlab】如何可视化多项式函数(附完整MATLAB代码)

可视化多项式函数 前言多项式函数MATLAB 对理解多项式函数的帮助 正文思考步骤 代码实现及图像显示对于一元多项式函数对于多元多项式函数 前言 多项式函数 多项式函数是数学中常见的一类函数&#xff0c;它的一般形式可以表示为&#xff1a; [ f ( x ) a n x n a n − 1 x…

基于Python Django的内容管理系统Wagtail CMS部署与公网访问

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS&#xff0c;建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

X86汇编语言:从实模式到保护模式(代码+注释)--c10、11(保护模式:32位x86处理器编程架构+进入保护模式)

保护模式&#xff1a;32位x86处理器编程架构 IA-32架构的基本执行环境 寄存器扩展 通用寄存器&#xff08;32&#xff09;&#xff1a;EAX EBX ECX EDX ESI EDI EBP ESP 指令寄存器&#xff08;32&#xff09;&#xff1a;EIP 标志寄存器&#xff08;32&#xff09;&#xff…