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