Archivos de aprendizaje, directorios y entrada / salida del módulo Qt Creator (2)

Archivos de aprendizaje, directorios y entrada / salida del módulo Qt Creator (2)

Este artículo es el tema central de la lectura y escritura de archivos. He utilizado tres formas de leer y escribir archivos. Si hay alguna deficiencia, espero poder recibir sus sugerencias.

Si es un principiante, puede ver:
archivos de aprendizaje del módulo Qt Creator, directorios y entrada / salida (1)

2. Leer y escribir archivos (utilizando el método básico QFile)

Para la conveniencia de la descripción en este capítulo, solo escribiré código, que es un programa pequeño.
La forma aproximada es:
Inserte la descripción de la imagen aquí

Realice los archivos básicos de apertura y almacenamiento.

La función de ranura se puede transferir a la ranura utilizando la interfaz del diseñador,

//打开文件
void MainWindowoid MainWindow::on_pushButton_clicked()
{
    
    
    QString filename = QFileDialog::getOpenFileName(this,
                                                "open","../","TXT(*.txt)");
    if(filename.isEmpty() == false){
    
    
        QFile file(filename);
        if(file.open(QIODevice::ReadOnly)==true){
    
    
            //全部读完
            //读文件,默认只识别utf8,如果想弄别的用文本流
  /*          QByteArray array = file.readAll();
            //显示到编辑区
            //ui->textEdit->setText(QString(array));
            ui->textEdit->setText(array); */
            //一行一行读
            QByteArray array;
            while(file.atEnd()==false){
    
    
                //读一行
               array = file.readLine();
            }
            ui->textEdit->setText(array);
        }
        file.close();
    }
}
//保存文件
void MainWindow::on_pushButton_2_clicked()
{
    
    
   QString filename = QFileDialog::getSaveFileName(this,"save","../","TXT(*.txt)");


   if(filename.isEmpty()==false){
    
    
       QFile file;//创建文件对象
       //关联文件名字
       file.setFileName(filename);
       //打开文件,只写方式
       if(file.open(QIODevice::WriteOnly)==true){
    
    
           //获取内容
           QString str = ui->textEdit->toPlainText();
           //写文件
           //把QString 转化为 QByteArray
           file.write(str.toUtf8());
       }
   }
}

3. Leer y escribir archivos (usando QDataStream para leer y escribir)

Este método se almacena en binario, generalmente lo llamamos almacenamiento de flujo de datos

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

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

Widget::~Widget()
{
    
    
    delete ui;
}
void Widget::writeData()
{
    
    
  QFile file("../test.txt");
  //打开文件,只写方式打开
  if(file.open(QIODevice::WriteOnly)==true){
    
    
      //创建数据流
      //往数据流中输入数据
      QDataStream stream(&file);
      stream << QString("求点赞求关注")<<521;
      file.close();
  }
}

void Widget::readData()
{
    
    
    QFile file("../test.txt");
    //打开文件,只写方式打开
    if(file.open(QIODevice::ReadOnly)==true){
    
    
        //创建数据流
        //往数据流中读取数据
         QDataStream stream(&file);
         //读的时候,按写的顺序取数据
         QString str;
         int a;
         stream >> str >> a;
         qDebug()<<str.toUtf8().data()<<a;
         file.close();
    }
}

Resultado de la operación:
uInserte la descripción de la imagen aquí

4. Leer y escribir archivos (usando QTextStream para leer y escribir)

Este método se almacena en forma de flujo de texto.

#include "widget.h"
#include "ui_widget.h"
#include <QTextStream>
#include <QFile>
#include <QDebug>

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

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

void Widget::writeData()
{
    
    
    QFile file;
  //此处的方式都可以,这里用不同的方式是为了让自己知道可以有好几种方式.
  file.setFileName("../demo.txt");
  //打开文件,只写方式打开
  if(true==file.open(QIODevice::WriteOnly))
  {
    
    
      QTextStream stream(&file);
      //指定编码,
      stream.setCodec("UTF-8");
      stream<<QString("求关注")<<521;
      file.close();
  }
}

void Widget::readData()
{
    
    
    QFile file("../demo.txt");
    //打开文件,只写方式打开
    if(true==file.open(QIODevice::ReadOnly)){
    
    
        QTextStream stream(&file);
        //指定编码,
        stream.setCodec("UTF-8");
        QString str;
        int a;
        stream >> str >> a;
        qDebug()<<str.toUtf8().data()<<a;
        file.close();
    }
}

Resultado de la operación: De
Inserte la descripción de la imagen aquí
esta manera, puede ver que hay un 0 al final de mi salida. Esta salida en sí misma es problemática, pero no es un gran problema cuando se usa el diseño de la interfaz.

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

No habrá ningún problema con esto.

5.buffer (archivo de memoria)

   QByteArray array;
    QBuffer memFile;
    memFile.open(QIODevice::WriteOnly);
    //加/n是换行
    memFile.write("111\n");
    memFile.write("222");
    memFile.close();


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


    QBuffer memFile1;
    memFile1.open(QIODevice::WriteOnly);
    QDataStream stream(&memFile1);
    stream<<QString("测试")<<521;
    memFile1.close();
     
    // 该方式读不出来
    qDebug()<<QString(memFile1.buffer()).toUtf8().data();
    
    memFile1.open(QIODevice::ReadOnly);
    QDataStream stream1;
    stream1.setDevice(&memFile1);
    QString str;int a;
    stream1>>str>>a;
    memFile1.close();
    qDebug()<<str.toUtf8().data()<<a;

Resultados de la operación:
Inserte la descripción de la imagen aquíEntre los cuatro métodos, el que más utilizo como estudiante debe ser el primero. Puedes echar un buen vistazo al segundo y tercer método. Personalmente, me siento muy útil.

Supongo que te gusta

Origin blog.csdn.net/m0_50210478/article/details/108148463
Recomendado
Clasificación