Qt---文件系统

news2024/11/24 14:31:59

一、基本文件操作

1. QFile对文件进行读和写

QFile file( path 文件路径)

读:
        file.open(打开方式)        QlODevice::readOnly
        全部读取->file.readAll(),按行读->file.readLine(),atend()->判断是否读到文件尾
        默认支持编码格式utf-8
        利用编码格式类指定格式QTextCodec 
        QTextcodec * codec = QTextCodec::codecForName("gbk" );

        ui->textEdit->setText( codec->tounicode(array) );

        文件对象关闭close
写:
        file.open( QlODevice::writeonly / Append)

        file.write(内容)
        file.close关闭

代码示例

#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击选取文件按钮,弹出文件对话框

    connect(ui->pushButton,&QPushButton::clicked,[=](){
        QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");
        //将路径放入到lineEdith中
        ui->lineEdit->setText(path);

        //编码格式类
        //QTextCodec *codec = QTextCodec::codecForName("gbk");

        //读取内容放入到textEdit中
        //QFile默认支持的格式是utf-8
        QFile file(path);//参数就是读取文件的路径
        //设置打开方式
        file.open(QIODevice::ReadOnly);

        //QByteArray array = file.readAll();

        QByteArray array;
        while(!file.atEnd())
        {
            array += file.readLine();//按行读
        }

        //将读取到的数据 放入到textEdit中
        ui->textEdit->setText(array);
        //ui->textEdit->setText(codec->toUnicode(array));

        //对文件对象进行关闭
        file.close();

        //进行写文件
        file.open(QIODevice::Append);//用追加的方式进行写
        file.write("啊啊啊啊啊");
        file.close();
    });
}

Widget::~Widget()
{
    delete ui;
}

输出如下所示:

2. QFileInfo读取文件信息

QFilelnfo info(路径)

qDebug()<<"大小: " <<info.size()<<”后缀名: " << info.suffix()<<"文件名称:"<<info.fileName()<<”文件路径: "<<info.filePath();
qDebug()<<“创建日期: "<<info.created().toString("yyyy/MM/dd hh;mm:ss");
qDebug()<<"最后修改日期: "<<info.lastModified().toString("yyyy/MM/dd hh;mm:ss");

代码示例:

#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>
#include<QFileInfo>
#include<QDebug>
#include<QDateTime>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击选取文件按钮,弹出文件对话框

    connect(ui->pushButton,&QPushButton::clicked,[=](){
        QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");
        //将路径放入到lineEdith中
        ui->lineEdit->setText(path);

        //编码格式类
        //QTextCodec *codec = QTextCodec::codecForName("gbk");

        //读取内容放入到textEdit中
        //QFile默认支持的格式是utf-8
        QFile file(path);//参数就是读取文件的路径
        //设置打开方式
        file.open(QIODevice::ReadOnly);

        //QByteArray array = file.readAll();

        QByteArray array;
        while(!file.atEnd())
        {
            array += file.readLine();//按行读
        }

        //将读取到的数据 放入到textEdit中
        ui->textEdit->setText(array);
        //ui->textEdit->setText(codec->toUnicode(array));

        //对文件对象进行关闭
        file.close();

        //进行写文件
//        file.open(QIODevice::Append);//用追加的方式进行写
//        file.write("啊啊啊啊啊");
//        file.close();

        //QFileInfo文件信息类
        QFileInfo info(path);

        qDebug()<<"大小:"<<info.size()<<"后缀名:"<<info.suffix()<<"文件名:"<<info.fileName()<<"文件路径:"<<info.filePath();
        qDebug()<<"创建日期"<<info.created().toString("yyyy/MM/dd hh:mm:ss");
        qDebug()<<"最后修改日期:"<<info.lastModified().toString("yyyy/MM/dd hh:mm:ss");
    });
}

Widget::~Widget()
{
    delete ui;
}

输出如下所示: 

 

 二、二进制文件读写

#include "widget.h"
#include "ui_widget.h"
#include<QDataStream>
#include<QFile>
#include<QDebug>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    writeData();
    readData();
}

void Widget::writeData()
{
    //创建文件对象
    QFile file("../test.txt");

    //打开文件,只写方式打开
    bool isOK = file.open(QIODevice::WriteOnly);
    if(true == isOK)
    {
        //创建数据流和file文件关联
        //往数据流中写数据,相当于往文件里写数据
        QDataStream stream(&file);

        stream<<QString("主要看气质")<<250;

        file.close();
    }
}

void Widget::readData()
{
    //创建文件对象
    QFile file("../test.txt");

    //打开文件,只读方式打开
    bool isOK = file.open(QIODevice::ReadOnly);

    if(true == isOK)
    {
        //创建数据流和file文件关联
        //往数据流中写数据,相当于往文件里读数据
        QDataStream stream(&file);
        //读的时候按写的顺序取数据
        QString str;
        int a;
        stream>>str>>a;
        //qDebug()<<str.toUtf8().data()<<a;
        cout<<str.toUtf8().data()<<a;

        file.close();
    }
}

Widget::~Widget()
{
    delete ui;
}

 三、文本文件读写

#include "widget.h"
#include "ui_widget.h"
#include<QTextStream>
#include<QFile>
#include<QDebug>
#include<QFileDialog>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    writeData();
    readData();
}

void Widget::writeData()
{
    QFile file;
    file.setFileName("../demo.txt");

    bool isOK = file.open(QIODevice::WriteOnly);
    if(true == isOK)
    {
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");

        stream<<QString("主要看气质")<<250;

        file.close();
    }
}

void Widget::readData()
{
    QFile file;
    file.setFileName("../demo.txt");

    bool isOK = file.open(QIODevice::ReadOnly);
    if(true == isOK)
    {
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");
        QString str;
        int a;
        stream>>str>>a;

        cout<<str.toUtf8().data()<<a;


        file.close();
    }
}

void Widget::on_pushButton_clicked()
{
    QString path = QFileDialog::getOpenFileName(this,"open","../");
    if (false == path.isEmpty())
    {
        QFile file;
        file.setFileName(path);

        bool isOK = file.open(QIODevice::ReadOnly);
        if(true == isOK)
        {
            QTextStream stream(&file);
            //指定编码
            stream.setCodec("UTF-8");

            QString str = stream.readAll();
            ui->textEdit->setText(str);

        }

    }
}

Widget::~Widget()
{
    delete ui;
}

读UTF-8和非UTF-8格式的输出对比:

 

四、内存文件读写

#include "widget.h"
#include "ui_widget.h"
#include<QBuffer>
#include<QDebug>
#include<QDataStream>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QByteArray array;
    QBuffer memFile;//创建内存文件
    memFile.open(QIODevice::WriteOnly);

    memFile.write("111111111");
    memFile.write("222222222222222");

    memFile.close();

    qDebug()<<memFile.buffer();
    qDebug()<<"array"<<array;

    QBuffer memFile1;
    memFile1.open(QIODevice::WriteOnly);
    QDataStream stream(&memFile1);
    stream<<QString("测试")<<250;
    memFile1.close();

    qDebug()<<memFile1.buffer();

    memFile1.open(QIODevice::ReadOnly);
    QDataStream in;
    in.setDevice(&memFile1);
    QString str;
    int a;
    in>>str>>a;
    memFile.close();

    qDebug()<<str.toUtf8().data()<<a;
}

Widget::~Widget()
{
    delete ui;
}

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

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

相关文章

算法课程笔记——自下而上树形DP

算法课程笔记——自下而上树形DP #include<bits/stdc.h>usingnamespacestd; constintN100005; intn,a[N]; longlongdp[N][2]; vector<int> e[N]; voiddfs(intu){for(autov:e[u]){dfs(v);dp[u][1]dp[v][0];dp[u][0]max(dp[v][0],dp[v][1]);}dp[u][1]a[u]; } intmain…

一个API接口对接ChatGPT3.5/4.0,Claude3,文心一言,通义千问,智谱AI等多款AI模型,打造属于自己的AI应用

今天我要给大家介绍团队的最新项目——一个集成了ChatGPT-3.5/4.0、Claude3、文心一言、通义千问、智谱AI等多个AI模型的API模型聚合平台。仅需使用一个接口就可以对接所有AI模型 为什么要创建这个平台&#xff1f; 随着不同的AI模型陆续问世&#xff0c;每个模型都有其独特…

怎么获得公网IP?

什么是公网IP 在计算机网络中&#xff0c;公网IP&#xff08;Internet Protocol&#xff09;是指可以直接被互联网访问和通信的IP地址。相对应的&#xff0c;私网IP则是在局域网内使用的IP地址&#xff0c;无法直接被互联网访问。获得公网IP对于一些特定的网络需求非常重要&am…

C++的相关知识集

1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效&#xff0c;简洁&#xff0c;快速和可移植的传统。 2 起源 与c语言一样&#xff0c;c也是在贝尔实验室诞生的&#xff0c;Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…

解锁AI写作新纪元的文心一言指令

解锁AI写作新纪元的文心一言指令 在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术取得了显著的进步。文心一言&#xff0c;作为NLP领域的一颗璀璨明星&#xff0c;以其强大的文本生成和指令理解能力&#xff0c;为…

【Docker】docker 镜像如何push到私有docker仓库

文章目录 一、 网址解析对于Linux和macOS系统&#xff1a;对于Windows系统&#xff1a; 二、 镜像push 一、 网址解析 希望 registry.meizu.com 能够解析到内网IP地址&#xff08;例如10.128.17.157&#xff09;&#xff0c;您可以通过修改主机的 hosts 文件来实现。 hosts 文…

Workfine签章方案使用说明

概述 为支持绝大部分第三方签章平台&#xff0c;Workfine针对性添加了部分动作事件与message支持。用户只需要自己开发中间代理程序&#xff0c;用于Workfine与签章平台的通讯即可完成整套签章方案。 整体业务流程图如下&#xff1a; 设计端添加发送PDF动作事件&#xff0c;生…

代理IP可靠吗?哪里可以找到可靠的代理?

需要代理来访问受限制的网站或改善您的在线隐私&#xff1f;别再犹豫了&#xff01;在这篇博文中&#xff0c;我们将探讨您可以使用的选项&#xff0c;并提供有关在哪里获取代理的指导。 首先&#xff0c;让我们了解什么是代理及其工作原理。代理充当您的设备和互联网之间的中介…

HTML哆啦A梦

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 谁不想拥有一只可爱的叮当猫呢&#xff1f;本期小编给大家带来了一个萌萌的哆啦A梦。 HTML简介 HTML&#xff0c;即超文本标记语言&#xff0c;是构建网页的基础技术之一&#xff0c;它是一种标…

[数据结构1.0]选择排序

鼠鼠前面的博客介绍过选择排序是常见的排序算法&#xff0c;选择排序有但不限于直接选择排序和堆排序&#xff01;那么鼠鼠今天浅谈一下选择排序&#xff01; 鼠鼠本博客用排升序来介绍选择排序&#xff01; 目录 1.直接选择排序 1.1.直接选择排序 1.2.直接选择排序特性 2…

【qt】动态属性

这里写目录标题 一.属性1.属性的好处2.添加属性3.使用属性 二.只读属性 一.属性 1.属性的好处 说到属性&#xff08;property&#xff09;&#xff0c;你们会想到什么&#xff1f;我会联想到特点&#xff0c;就是一类对象所特有的&#xff0c;在C中&#xff0c;成员数据就是这…

标准流、浮动、flex布局

标准流 浮动 特点&#xff1a; 具备顶对齐&#xff0c;行内块显示特点&#xff0c;浮动的盒子是脱离了标准流。 如果父级的宽度不够&#xff0c;浮动的盒子会掉下来 <style>.one{width: 200px;height: 200px;background-color: aqua;float: left;}.two{width: 200px;he…

zabbix监控mariadb

zabbix 服务端安装请参阅&#xff1a;红帽 9 zabbix 安装流程_红帽安装zabbix-CSDN博客 源码包安装mariadb请参阅&#xff1a;源码包安装mariadb_mariadb 11 源码编译安装-CSDN博客 在MariaDB中&#xff0c;你需要创建一个专门的用户&#xff0c;用于Zabbix进行监控。这个用户…

PingCAP 戴涛:构建面向未来的金融核心系统

作者&#xff1a;戴涛 导读 近日&#xff0c;平凯星辰解决方案技术部总经理戴涛在 2024 数据技术嘉年华活动中&#xff0c;做了主题为“构建面向未来的金融核心系统”的分享&#xff0c;本文为戴涛演讲实录的全文。 文章分析了中国金融行业的发展趋势&#xff0c;并且基于这…

Typescript 哲学 - ts模块使用最佳实践

ts的作用域 默认是全局&#xff08;global&#xff09;&#xff0c;这也是为什么在 两个ts文件声明同一个变量报错变量名冲突&#xff0c;解决方法是使某个文件以模块的形式存在&#xff08;文件顶层使用 export 、import &#xff09; In TypeScript, just as in ECMAScript 2…

微软如何打造数字零售力航母系列科普10 - 什么是Azure Databricks?

什么是Azure Databricks&#xff1f; 目录 一、数据智能平台是如何工作的&#xff1f; 二、Azure Databricks的用途是什么&#xff1f; 三、与开源的托管集成 四、工具和程序访问 五、Azure Databricks如何与Azure协同工作&#xff1f; 六、Azure Databricks的常见用例是…

2024.5组队学习——MetaGPT智能体理论与实战(待续)

学习资料&#xff1a;项目地址——hugging-multi-agent、在线阅读、MetaGPT项目、MetaGPT中文文档 文章目录 一、环境配置1.1 配置MetaGPT1.2 配置大模型api_key1.3 测试demo 一、环境配置 全部工作在Autodl上完成&#xff0c;下面是简单记录&#xff1a; 1.1 配置MetaGPT 下…

Android Activity因配置改变重建,ViewModel#onClear方法为什么不被调用?

1&#xff0c;问题 注意到切换语言或字体大小改变时&#xff0c;Activity会发生重建&#xff0c;但对应的ViewModel却不会被clear&#xff0c;甚至在重建的Activity&#xff0c;通过new ViewModelProvider(this).get(ViewModel.class)也是上一个Activity的实例&#xff0c;为什…

【精读Yamamoto】方向性连接如何丰富神经网络的功能复杂度 | 体外神经元培养实验 | 脉冲神经元模型(SNN) | 状态转移模型

探索大脑的微观世界&#xff1a;方向性连接如何丰富神经网络的功能复杂度 在神经科学领域&#xff0c;理解大脑如何通过其复杂的网络结构实现高级功能一直是一个核心议题。最近&#xff0c;一项由Nobuaki Monma和Hideaki Yamamoto博士领导的研究为我们提供了新的视角&#xff…

Linux----正则表达式练习题题解

1、 显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行&#xff1b; [rootopenEuler ~]# grep -E "^(H|h)" /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt 注&#xff1a;当然也可以使用grep -i来实现&#xff0c;这里我换了一个文件&#xff08;/etc/passw…