Qt QFile读写文件

文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类(Qt5):
在这里插入图片描述
QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。
QFlie:访问本地文件或者嵌入资源;
QTemporaryFile:创建和访问本地文件系统的临时文件;
QBuffer:读写QbyteArray, 内存文件;
QProcess:运行外部程序,处理进程间通讯;
QAbstractSocket:所有套接字类的父类;
QTcpSocket:TCP协议网络数据传输;
QUdpSocket:传输 UDP 报文;
QSslSocket:使用 SSL/TLS 传输数据;

简单的文件读写代码如下:
mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

private slots:
    void on_ButtonRead_clicked();//ui中直接右击转到槽时自动添加的

    void on_ButtonSave_clicked();

private:
    Ui::MyWidget *ui;
};
#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"
#include<QFile>
#include<QFileDialog>
#include<QFileInfo>  //F1
#include<QDebug>
#include<QDateTime>
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}

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


void MyWidget::on_ButtonRead_clicked()
{
    QString path=QFileDialog::getOpenFileName(this,"open_File","../07_QFile","*.*");
    if(!path.isEmpty())
    {
        //创建文件对象
        QFile file(path);
        //打开文件,只读方式
        bool isOK=file.open(QIODevice::ReadOnly);
        if(isOK)
        {
#if 0
            //读文件,默认只可以识别utf8编码
            QByteArray array=file.readAll();
            //显示到编辑区
            //ui->textEdit->setText(QString(array));
            ui->textEdit->setText(array);
#endif
#if 1
            QByteArray array;
            while(file.atEnd()==false)
            {
                //读一行
                array+=file.readLine();

            }
            ui->textEdit->setText(array);
#endif
        }

        //关闭文件
        file.close();
        //获取文件信息
        QFileInfo info(path);
        qDebug()<<"文件名:"<<info.fileName().toUtf8().data();//QString-->QByteArray-->char*
        qDebug()<<"文件后缀:"<<info.suffix();
         qDebug()<<"文件大小:"<<info.size()/1024<<"KB";
         qDebug()<<"文件创建时间:"<<
                   info.birthTime().toString("yyyy-MM-dd");

    }
}

void MyWidget::on_ButtonSave_clicked()
{
    QString path= QFileDialog::getSaveFileName(this,"save_File","../07_QFile","TXT(*.txt)");
    if(!path.isEmpty())
    {
        //QFile file(path);
        QFile file;
        file.setFileName(path);

        //打开方式,只写
        bool isOK=file.open(QIODevice::WriteOnly);
        if(isOK)
        {
            //获取编辑区内容
            QString str=ui->textEdit->toPlainText();
            //写文件
            //QString-->QByteArray
            file.write(str.toUtf8());



#if 0
            //QString-->c++string-->char*
            file.write(str.toStdString().data());
            //转换为本地平台编码
            file.write(str.toLocal8Bit());
#endif
        }
        file.close();

    }
}

QByteArray–>char*

QByteArray a;
char*b=a.data();

char*–>QString

char* p="abc";
QString c=QString(p);

发布了241 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/105006277