QFile Class

1.read读文件

  • 加载文件对象  QFile file("文件地址");
  • 打开加载的文件file.open(打开方式);
  • 操作文件
  • 关闭打开的文件file.colse();
void Widget::on_pushButton_clicked()
{
QFile file("L:/qtpro/_qtApp/text/t.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);
QByteArray t = file.readAll();
ui->text_r->setText(QString(t));
file.close();
}

2.wirte写文件

  • 以纯文本的形式读取要保存文件到QString对象 //ui->text_e->toPlainText();
  • 创建QFile 对象保存文件
  • 打开QFile对象
  • 写入文件操作
  • 关闭打开的文件;
void Widget::on_pushButton_2_clicked()
{
QString e = ui->text_e->toPlainText();
QFile file("L:/qtpro/_qtApp/text/e.txt");
file.open(QIODevice::WriteOnly | QIODevice::Text);
file.write(e.toUtf8());
file.close();
}

细节优化处理

  • read文件添加读取文件选择项 QFileDialog::getOpenFileName();
  • 打开文件是否成功的判断;
  • 按行读取文件,可控制读取行数与每行字符数;
  • write文件创建保存路径QFileDialog::getSaveFileName(); 
void Widget::on_pushButton_clicked()
{
QFile file;
QString f = QFileDialog::getOpenFileName(this, QString("选择文件"), QString("/"),QString("TEXT(*.txt)"));
file.setFileName(f);
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QByteArray t ;
while(!file.atEnd())
{
t += file.readLine();
}
ui->text_r->setText(QString(t));
file.close();
}
} void Widget::on_pushButton_2_clicked()
{
QString e = ui->text_e->toPlainText();
QFile file;
file.setFileName(QFileDialog::getSaveFileName(this, QString("保存路径"), QString("/"),QString("TEXT(*.txt)")));
file.open(QIODevice::WriteOnly | QIODevice::Text);
file.write(e.toUtf8());
file.close();
}

各编码转换

QString -> QByteArray      QString.toUtf8();

QByteArray -> std::string  QByteArray.toStdString();

std::string -> char *        string.date();

常用静态函数:

QFileDialog::getOpenFileName()    //获取指定文件路径名返回QString

QFileDialog::getExistingDirectory()  //获取指定路径返回QString

QFileDialog::getSaveFileName()    //获取指定保存路径返回QString

辅助配合使用的类:

QFileInfo class

获取文件信息;

QFileInfo类用于读取文件的属性信息

    QFile file(f);
QFileInfo info(file); qDebug() << info.exists();
qDebug() << info.isFile();
qDebug() << info.isReadable();
qDebug() << info.isWritable();
qDebug() << info.created();
qDebug() << info.lastRead();
qDebug() << info.lastModified();
qDebug() << info.path();
qDebug() << info.fileName();
qDebug() << info.suffix();
qDebug() << info.size();

二、文本流与数据流

QT中将文件分为文本文件和数据文件,文本文件内容是可读的文本字符,数据文件的内容是二进制数据。

QFile直接支持文本文件和数据文件的操作,主要函数接口如下:

  • qint64 read( char * data, qint64 maxSize) //数据流读取
  • QByteArray read( qint64 maxSize) //文本流方式读取
  •  QByteArray readAll() //文本流方式读取
  •  QByteArray readLine()//文本流方式读取
  • qint64 write(const char * data, qint64 maxSize)
  • qint64 write(const QByteArray & byteArray)

为了简化文本文件和数据文件的读写操作,QT提供了QTextStream和QDataStream辅助类。QTextStream可将写入的数据全部转换为可读文本,QDataStream可将写入的数据根据类型转换为二进制数据。

QTemporaryFile是QT中的临时文件操作类,用来安全创建全局唯一的临时文件,QTemporaryFile对象销毁时对应的临时文件将被删除,临时文件的打开方式为QIODevice::ReadWrite,临时文件常用于大数据传递或者进程间通信场合。

QTemporaryFile tempFile;
if( tempFile.open() )
{
tempFile.write("D.T.Software");
tempFile.close();
}

QDataStream Class

数据流操作文件:

创建流对象 QDataStream date;

int a= xxxx;

string b = "xxxxxxxxx" ;

将数据存在流中 date >> a >> b;

int aa;

string bb;

从流中取出数据 date << aa << bb;

QDataStream在不同的QT版本中数据流文件格式可能是不同的,如果数据流文件需要在不同版本的QT程序间传递时需要考虑版本问题。

void setVersion(int v)

int version() const

QTextStream Class

文本方式操作文件:

创建流对象 QTextStream date;

date.setCodec();支持对文件读取编码设置(有效解决乱码问题)

QBuffer

QBuffer类为QByteArray提供QIODevice接口。

目前先理解为一个创建一个缓存文件;

QT中预定义了缓冲区的类QBuffer,可以将缓冲区看成一种特殊的IO设备,文件流辅助类可以直接用于操作缓冲区。QBuffer缓冲区写入和读取的数据必须是同一种数据类型,不能混合多种数据类型。

QBuffer的使用场合:

A、线程间不同类型的数据传递

B、缓存外部设备中的数据返回

C、数据读取速度小于写入速度

总结:

读写操作主要方法有read();readAll();readline(),write();

附录:

目录操作

1、QDir

QT中提供了目录操作类QDir,QDir功能如下:

A、目录分隔符统一使用’/’

B、能够对目录进行任意操作(创建、删除、重命名)

C、能够获取指定目录中的所有条目(文件和文件夹)

D、能够使用过滤字符串获取指定条目

E、能够获取系统中的所有根目录

QDir使用方法如下:

 QDir dir;
QString path("../qt/test");
if(!dir.exists())
{
dir.mkdir(path);
}
else
{
dir.cd(path);
QStringList list = dir.entryList();
for(int i = ; i < list.count(); i++)
{
qDebug() << list[i];
}
} //计算文件大小
unsigned int FileSize(QString path)
{
QFileInfo info(path);
unsigned int ret = ;
if(info.isFile())
{
ret = info.size();
}
else if(info.isDir())
{
QDir dir(path);
QFileInfoList list = dir.entryInfoList();
for(int i = ; i < list.count(); i++)
{
if((list[i].fileName() != ".") && (list[i].fileName() != ".."))
{
ret += FileSize(list[i].absoluteFilePath());
}
}
}
return ret;
}

2、QFileSystemWatcher

QT中预定义了用于监控文件和目录变化的类QFileSystemWatcher,

QFileSystemWatcher主要功能如下:

A、能够监控特定目录和文件的状态

B、能够同时对多个文件和目录进行监控

C、当目录或文件发生改变时触发信号

D、通过信号与槽的机制捕捉信号并做出响应

通常要使用QFileSystemWatcher需要自定义文件监视类。

QT5 文件读写操作的更多相关文章

  1. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  2. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  3. PHP文件读写操作之文件写入代码

    在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...

  4. Java 字节流实现文件读写操作(InputStream-OutputStream)

    Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...

  5. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...

  6. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  7. 实现动态的XML文件读写操作

    实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...

  8. ios 简单的plist文件读写操作(Document和NSUserDefaults)

    最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家. 一,简单介绍一下常用的plist文件. 全名是:Property List,属性列表文件,它是一种用来存储串行化后的对 ...

  9. java文件读写操作类

    借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...

随机推荐

  1. Python3遍历指定文件夹下所有文件及文件夹

    采用os模块儿: import os def get_filelist(dir): for home, dirs, files in os.walk(dir): print("####### ...

  2. TZOJ1299: 畅通工程

    #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #i ...

  3. Springboot入门及配置文件介绍(内置属性、自定义属性、属性封装类)

    目的: 1.Springboot入门 SpringBoot是什么? 使用Idea配置SpringBoo使用t项目 测试案例 2.Springboot配置文件介绍 内置属性 自定义属性 属性封装类 Sp ...

  4. Vue使用指南(三)

    组件 '''1.根组件:new Vue()创建的组件,一般不明确自身的模板,模板就采用挂载点2.局部组件: local_component = {}2.全局组件: Vue.component({})' ...

  5. Inline Hook 钩子编写技巧

    Hook 技术通常被称为钩子技术,Hook技术是Windows系统用于替代中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控制权,在执行系统调用之前执行自身程序, ...

  6. JavaDoc工具和Ideade javadoc工具

    命令参考: javadoc -locale zh_CN -protected -notree -nonavbar -noindex -use -author -version -encoding UT ...

  7. 微信小程序自定义组件——接受外部传入的样式类

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html 外部样式类 有时, ...

  8. 【转载】C#中将字符串分割成字符数组

    在C#中字符串类型String是由一系列的单个字符组合而成,其实可以通过字符串String对象ToCharArray()方法来将字符串中的元素逐一存在数据类型为Char的一维数组中. 例如将字符str ...

  9. 《你不知道的Javascript》感悟篇—对象属性遍历的那些事

    划重点 本篇笔者将重点介绍JavaScript中 getOwnPropertyNames .Object.keys.for ... in 的使用及他们之间的异同点. getOwnPropertyNam ...

  10. python识别文字tesseract

    Ubuntu版本: .tesseract-ocr安装 sudo apt-get install tesseract-ocr .pytesseract安装 sudo pip install pytess ...