Qt---文件系统

一、基本文件操作

  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关闭

代码示例:

cpp 复制代码
#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;
}

输出如下所示:

  1. 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");

代码示例:

cpp 复制代码
#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;
}

输出如下所示:

二、二进制文件读写

cpp 复制代码
#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;
}

三、文本文件读写

cpp 复制代码
#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格式的输出对比:

四、内存文件读写

cpp 复制代码
#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;
}
相关推荐
C-SDN花园GGbond37 分钟前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处2 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ2 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
leon6252 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林2 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
white__ice3 小时前
2024.9.19
c++
天玑y3 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
锦亦之22333 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏3 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2333 小时前
c++ static(详解)
开发语言·c++