Qt Creator Modul Lerndateien, Verzeichnisse und Eingabe / Ausgabe (2)

Qt Creator Modul Lerndateien, Verzeichnisse und Eingabe / Ausgabe (2)

Dieser Artikel steht im Mittelpunkt des Lesens und Schreibens von Dateien. Ich habe drei Methoden zum Lesen und Schreiben von Dateien verwendet. Wenn es Mängel gibt, hoffe ich, dass ich Ihre Vorschläge erhalten kann.

Wenn Sie ein Anfänger sind, können Sie sehen:
Qt Creator Modul Lerndateien, Verzeichnisse und Eingabe / Ausgabe (1)

2. Dateien lesen und schreiben (mit der grundlegenden QFile-Methode)

Zur Vereinfachung der Beschreibung in diesem Kapitel werde ich nur Code schreiben, bei dem es sich um ein kleines Programm handelt.
Die ungefähre Form ist:
Fügen Sie hier eine Bildbeschreibung ein

Realisieren Sie das grundlegende Öffnen und Speichern von Dateien.

Die Slot-Funktion kann über die Designer-Oberfläche auf den Slot übertragen werden.

//打开文件
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. Dateien lesen und schreiben (mit QDataStream lesen und schreiben)

Diese Methode wird binär gespeichert, wir nennen sie normalerweise Datenstromspeicher

#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();
    }
}

Betriebsergebnis:
uFügen Sie hier eine Bildbeschreibung ein

4. Dateien lesen und schreiben (mit QTextStream lesen und schreiben)

Diese Methode wird in Form eines Textstroms gespeichert

#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();
    }
}

Operationsergebnis: Auf
Fügen Sie hier eine Bildbeschreibung ein
diese Weise können Sie sehen, dass am Ende meiner Ausgabe eine 0 steht. Diese Ausgabe selbst ist problematisch, aber bei Verwendung des Schnittstellendesigns kein großes Problem.

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

Damit wird es kein Problem geben.

5. Puffer (Speicherdatei)

   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;

Operationsergebnisse:
Fügen Sie hier eine Bildbeschreibung einUnter den vier Methoden sollte die erste, die ich als Schüler verwende, die erste sein. Sie können sich die zweite und dritte Methode genau ansehen. Ich persönlich fühle mich sehr nützlich.

Ich denke du magst

Origin blog.csdn.net/m0_50210478/article/details/108148463
Empfohlen
Rangfolge