QT文件操作(QFile、QDataStream、QTextStream、QBuffer)

QFile

一、读文件

1.读全部

void MyWidget::on_readFileButton_clicked()

{

    QString path = QFileDialog::getOpenFileName(this,"open","../","TXT(*.txt)");       //最后两个参数分别为,默认路径和默认筛选格式

    if(path.isEmpty()==false)     //如果路径不为空

    {

        QFile file(path);         //创建文件对象

 

 

        bool isOK = file.open(QIODevice::ReadOnly);  //只读模式

        if(isOK == true)           //打开成功

        {

            QByteArray array  = file.readAll();  //读取

            ui->textEdit->setText(array);       //设置读取的信息到ui上

        }

        file.close();                          //关闭文件

    }

}

2.读一行

void MyWidget::on_readFileButton_clicked()

{

    QString path = QFileDialog::getOpenFileName(this,"open","../","TXT(*.txt)");

    if(path.isEmpty()==false)

    {

        QFile file(path);

 

        bool isOK = file.open(QIODevice::ReadOnly);

        if(isOK == true)

        {

            QByteArray array;

            while(file.atEnd() == false)    //没有到文件结尾

            {

                array  += file.readLine();   //将读到的行追加到数组后面

            }

 

            ui->textEdit->setText(array);

        }

        file.close();

    }

}

 

二、写文件

void MyWidget::on_writeFileButton_clicked()

{

    QString path = QFileDialog::getSaveFileName(this,"open","../","TXT(*.txt)");

    if(path.isEmpty()==false)

    {

        QFile file;           //创建文件对象

        file.setFileName(path);//关联文件

        bool isOK = file.open(QIODevice::WriteOnly);   //只写模式打开

        if(isOK == true)

        {

            QString str = ui->textEdit->toPlainText();//获取编辑区内容

            file.write(str.toStdString().data());//C++方式,转换成char*类型

        }

        file.close();

    }

}

 

三、编码转换

1.QString ----> 本地编码

QByteArray array=str.toLocal8Bit();

 

2.QString ----> UTF8编码

QByteArray array=str.toUtf8();

 

3.QByteArray---->char *

char *charater = array.data();

 

4.char * ---->QString

QString str = QString(charater);

 

四、获取文件信息

        QFileInfo info(path);

        qDebug()<<"文件名"<<info.fileName();

        qDebug()<<"文件后缀"<<info.suffix();

        qDebug()<<"文件大小"<<info.size();

        qDebug()<<"文件创建时间"<<info.birthTime().toString("yyyy-MM-dd hh:mm:ss");//返回QDateTime类型数据

 

QDataStream

一、使用数据流写数据

void MyWidget::on_writeDataButton_clicked()

{

    QFile file("../Test11/1.txt");

    bool isOK = file.open(QIODevice::WriteOnly);

    if(isOK == true)

    {

        QString str = ui->textEdit->toPlainText();

        QDataStream stream(&file);//创建数据流和file文件关联

        stream<<str;//向数据流中输出内容

    }

    file.close();

}

 

二、使用数据流读数据

void MyWidget::on_readDataButton_clicked()

{

    QFile file("../Test11/1.txt");

    bool isOK = file.open(QIODevice::ReadOnly);

    QString str;

    if(isOK == true)

    {

        QDataStream stream(&file);

        //QDataStream stream;

        //stream.setDevice(&file);

        stream>>str;//从数据流中读内容

        ui->textEdit_2->setText(str);

    }

    file.close();

}

 

注意:使用数据流保存的文件,打开是乱码,因为是二进制文件。

QTextStream

一、写文件

void MyWidget::on_writeButton_2_clicked()

{

    QFile file;

    file.setFileName("../Test12/1.txt");

    bool isOK = file.open(QIODevice::WriteOnly);

    if(isOK == true)

    {

        QTextStream stream(&file);

        QString str;

        str = ui->writeEdit->toPlainText();

        stream<<str;

    }

    file.close();

}

 

二、读文件

void MyWidget::on_ReadButton_clicked()

{

    QFile file;

    file.setFileName("../Test12/1.txt");

    bool isOK = file.open(QIODevice::ReadOnly);

    if(isOK == true)

    {

        QTextStream stream(&file);

        QString str = stream.readAll();

        ui->readEdit->setText(str);

    }

    file.close();

}

 

QBuffer

一、写操作

    QByteArray array;

    QBuffer memFile(&array);//指定存储的字节数组

    memFile.open(QIODevice::WriteOnly);

    memFile.write("123");

    memFile.write("abc");

    memFile.close();

    qDebug()<<memFile.buffer();//获取内存中的数据

    qDebug()<<"array:"<<array;//输出字节数组

 

二、读操作

可以使用QDataStream进行读操作,可以将多次写入的数据分开读取。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值