一、基本文件操作
1. QFile对文件进行读和写
QFile file( path 文件路径)
读:
file.open(打开方式) QlODevice::readOnly
全部读取->file.readAll(),按行读->file.readLine(),atend()->判断是否读到文件尾
默认支持编码格式utf-8
利用编码格式类指定格式QTextCodec
QTextcodec * codec = QTextCodec::codecForName("gbk" );ui->textEdit->setText( codec->tounicode(array) );
文件对象关闭close
写:
file.open( QlODevice::writeonly / Append)file.write(内容)
file.close关闭
代码示例:
#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//点击选取文件按钮,弹出文件对话框connect(ui->pushButton,&QPushButton::clicked,[=](){QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");//将路径放入到lineEdith中ui->lineEdit->setText(path);//编码格式类//QTextCodec *codec = QTextCodec::codecForName("gbk");//读取内容放入到textEdit中//QFile默认支持的格式是utf-8QFile file(path);//参数就是读取文件的路径//设置打开方式file.open(QIODevice::ReadOnly);//QByteArray array = file.readAll();QByteArray array;while(!file.atEnd()){array += file.readLine();//按行读}//将读取到的数据 放入到textEdit中ui->textEdit->setText(array);//ui->textEdit->setText(codec->toUnicode(array));//对文件对象进行关闭file.close();//进行写文件file.open(QIODevice::Append);//用追加的方式进行写file.write("啊啊啊啊啊");file.close();});
}Widget::~Widget()
{delete ui;
}
输出如下所示:
2. QFileInfo读取文件信息
QFilelnfo info(路径)
qDebug()<<"大小: " <<info.size()<<”后缀名: " << info.suffix()<<"文件名称:"<<info.fileName()<<”文件路径: "<<info.filePath();
qDebug()<<“创建日期: "<<info.created().toString("yyyy/MM/dd hh;mm:ss");
qDebug()<<"最后修改日期: "<<info.lastModified().toString("yyyy/MM/dd hh;mm:ss");
代码示例:
#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>
#include<QFileInfo>
#include<QDebug>
#include<QDateTime>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//点击选取文件按钮,弹出文件对话框connect(ui->pushButton,&QPushButton::clicked,[=](){QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");//将路径放入到lineEdith中ui->lineEdit->setText(path);//编码格式类//QTextCodec *codec = QTextCodec::codecForName("gbk");//读取内容放入到textEdit中//QFile默认支持的格式是utf-8QFile file(path);//参数就是读取文件的路径//设置打开方式file.open(QIODevice::ReadOnly);//QByteArray array = file.readAll();QByteArray array;while(!file.atEnd()){array += file.readLine();//按行读}//将读取到的数据 放入到textEdit中ui->textEdit->setText(array);//ui->textEdit->setText(codec->toUnicode(array));//对文件对象进行关闭file.close();//进行写文件
// file.open(QIODevice::Append);//用追加的方式进行写
// file.write("啊啊啊啊啊");
// file.close();//QFileInfo文件信息类QFileInfo info(path);qDebug()<<"大小:"<<info.size()<<"后缀名:"<<info.suffix()<<"文件名:"<<info.fileName()<<"文件路径:"<<info.filePath();qDebug()<<"创建日期"<<info.created().toString("yyyy/MM/dd hh:mm:ss");qDebug()<<"最后修改日期:"<<info.lastModified().toString("yyyy/MM/dd hh:mm:ss");});
}Widget::~Widget()
{delete ui;
}
输出如下所示:
二、二进制文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QDataStream>
#include<QFile>
#include<QDebug>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);writeData();readData();
}void Widget::writeData()
{//创建文件对象QFile file("../test.txt");//打开文件,只写方式打开bool isOK = file.open(QIODevice::WriteOnly);if(true == isOK){//创建数据流和file文件关联//往数据流中写数据,相当于往文件里写数据QDataStream stream(&file);stream<<QString("主要看气质")<<250;file.close();}
}void Widget::readData()
{//创建文件对象QFile file("../test.txt");//打开文件,只读方式打开bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){//创建数据流和file文件关联//往数据流中写数据,相当于往文件里读数据QDataStream stream(&file);//读的时候按写的顺序取数据QString str;int a;stream>>str>>a;//qDebug()<<str.toUtf8().data()<<a;cout<<str.toUtf8().data()<<a;file.close();}
}Widget::~Widget()
{delete ui;
}
三、文本文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QTextStream>
#include<QFile>
#include<QDebug>
#include<QFileDialog>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);writeData();readData();
}void Widget::writeData()
{QFile file;file.setFileName("../demo.txt");bool isOK = file.open(QIODevice::WriteOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");stream<<QString("主要看气质")<<250;file.close();}
}void Widget::readData()
{QFile file;file.setFileName("../demo.txt");bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");QString str;int a;stream>>str>>a;cout<<str.toUtf8().data()<<a;file.close();}
}void Widget::on_pushButton_clicked()
{QString path = QFileDialog::getOpenFileName(this,"open","../");if (false == path.isEmpty()){QFile file;file.setFileName(path);bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");QString str = stream.readAll();ui->textEdit->setText(str);}}
}Widget::~Widget()
{delete ui;
}
读UTF-8和非UTF-8格式的输出对比:
四、内存文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QBuffer>
#include<QDebug>
#include<QDataStream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QByteArray array;QBuffer memFile;//创建内存文件memFile.open(QIODevice::WriteOnly);memFile.write("111111111");memFile.write("222222222222222");memFile.close();qDebug()<<memFile.buffer();qDebug()<<"array"<<array;QBuffer memFile1;memFile1.open(QIODevice::WriteOnly);QDataStream stream(&memFile1);stream<<QString("测试")<<250;memFile1.close();qDebug()<<memFile1.buffer();memFile1.open(QIODevice::ReadOnly);QDataStream in;in.setDevice(&memFile1);QString str;int a;in>>str>>a;memFile.close();qDebug()<<str.toUtf8().data()<<a;
}Widget::~Widget()
{delete ui;
}