一、逻辑思路
1、打开文件
1、创建dialog窗体,静态调用QFileDialog::getfilename,并QString输出
2、判断filename名字是否为空
3、创建QFile指针myfile,设置指针文件名setFileName
4、打开文件夹返回bool值
5、判断文件是否打开成功
6、while(判断文件是否到文件末尾)
{
读取文件defile MEG_LEN=1024
QByteArray ba =myfile.read(MEG_LEN)
QString str = QString(ba)
}
7、关闭文件
2、保存文件
1、打开获取保存文件的QFileDialog::getSaveFileName来输入文件名,返回值为输入的文件名
2、判断文件名是否为空,QMessage输出错误显示
3、设置QFile的指针名(为输入的文件名),QFile的指针打开文件,返回值为是否打开文件
4、对返回值进行判断是否打开成功,QMessage输出错误显示
5、获取ui.EditText的输入内容
6、QFile指针用write函数对文件进行写入
7、QFile指针用close函数关闭文件
.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFile>
#include <QByteArray>
#define MES_LENGTH 1024
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
myfile = new QFile(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QString fd = QFileDialog::getOpenFileName(this,"get file","../fileDialog_4_1/","SOURCE(*.cpp);;HEADERS(*.h);;FORMS(*.ui)");
qDebug()<<fd<<endl;
if(fd.isEmpty()){
QMessageBox::warning(this,"file open","file can't open!");
return;
}
myfile->setFileName(fd);
bool ret = myfile->open(QIODevice::ReadOnly|QIODevice::Text);
if(!ret){
QMessageBox::warning(this,"warning","open fail");
return;
}
// char buff[MEG_LENGTH+1] = {0};
//QTextStream myqts(myfile);
//第一种:QFile直接读取的方式
while(!myfile->atEnd()){
QByteArray ba = myfile->readLine();
QString str = QString(ba);
ui->textBrowser->append(str);
}
/*
//第二种:二进制文件流的形式读取
QTextStream text(myfile);
while(!text.atEnd())
{
QString ba = text.readLine();
QString str = QString(ba);
ui->textBrowser->append(ba);
}
*/
myfile->close();
}
void Widget::on_pushButton_2_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,"save file","../fileDialog_4_1","Text(*.cpp *.h)");
if(fileName.isEmpty()){
QMessageBox::warning(this,"warning","fileName is empty");
return;
}
myfile->setFileName(fileName);
bool ret = myfile->open(QIODevice::WriteOnly|QIODevice::Text);
if(!ret){
QMessageBox::warning(this,"warining","文件打开失败");
return;
}
//直接文件操作
/*
QString str = ui->textEdit->toPlainText();
myfile->write(str.toLocal8Bit());
myfile->close();
*/
//文本流操作
QTextStream mystream(myfile);
QString str_stream = ui->textEdit->toPlainText();
mystream<<str_stream;
mystream.flush();//刷新文件
myfile->close();
}
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QFile>
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QFile *myfile;
};
#endif // WIDGET_H