一、基本文件操作
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-8
QFile 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-8
QFile 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;
}