Bootstrap

Qt桌面应用开发 第八天(读写文件 文件编码 文件流)

目录

1.读文件

2.写文件及编码格式

2.1写文件

2.2编码格式

3.文件信息读取

4.文件流

4.1QTextStream

4.2QDataStream


1.读文件

需求:一个pushButton,点击之后可以选择一个txt文件的路径,路径会显示在lineEdit上,txt文件的内容会显示在textEdit上

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

    connect(ui->pushButton,&QPushButton::clicked,[=]{
        QString filePath=QFileDialog::getOpenFileName(this,"打开文件","E:\\Qt\\File");

        ui->lineEdit->setText(filePath);

        QFile file(filePath);
        file.open(QIODevice::ReadOnly);

        QByteArray arr;
        arr=file.readAll();
        ui->textEdit->setText(arr);

        file.close();
    });
}

  1. file.open(QIODevice::ReadOnly)——读取方式QIODevice::ReadOnly或QFile::ReadOnly
  2. readAll()——将文件内容一次性全部读取
  3. readLine()——按行读取文件信息,atEnd()判断文件是否读到了尾部,如下:
//arr=file.readAll();
        
while(!file.atEnd())
{
  arr += file.readLine();
}

2.写文件及编码格式

2.1写文件

    QFile file(filePath);
    file.open(QFileDevice::Append);
    file.write("你好");
    file.close();
  1. QFileDevice::WriteOnly会覆盖之前写的内容
  2. QFileDevice::Append会实现追加写入

2.2编码格式

Qt默认支持的编码格式是utf-8。读取其他格式的文件时,需要将文本设置为指定的格式再进行读取,如“gbk”格式。

    //文本的编码方式
    QTextCodec* codec=QTextCodec::codecForName("gbk");
    
    QByteArray arr;
    arr=file.readAll();
    
    //将文本设置为gbk编码格式
    ui->textEdit->setText(codec->toUnicode(arr));

3.文件信息读取

QFileInfo提供了文件名称、位置、后缀名、是否为目录等信息,可以获取文件大小、最后修改时间、读取时间

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

4.文件流

4.1QTextStream

处理文本数据,对Qt的字符串和I/O类进行了优化,可以使用<<或>>读写数据

【写数据】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");
    file.open(QFileDevice::WriteOnly);

    QTextStream stream(&file);
    stream<<QString("123")<<123456;

    file.close();

【读数据】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");
    file.open(QFileDevice::ReadOnly);
    
    QTextStream readStream(&file);
    QString arr=readStream.readAll();
    
    qDebug()<<arr;
    file.close();

4.2QDataStream

用于处理二进制数据,可以序列化Qt的数据类型为二进制格式,并能从二进制格式中反序列化它们,注意要按照数据类型读取数据

【写文件】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");
    file.open(QFileDevice::WriteOnly);

    QDataStream stream(&file);
    stream<<QString("123")<<123456;

    file.close();

原因:文件是二进制的方式写入的

【读文件】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");
    file.open(QFileDevice::ReadOnly);

    //声明数据类型,按照数据类型读取数据
    QString str;
    int num;
    QDataStream stream(&file);
    stream>>str>>num;

    qDebug()<<str<<num;
    file.close();

;