qt QFile QTextStream \QDataStream读写文件操作

一.QFile类

QFile是Qt中的一个类,用于读写文件。它提供了一些基本的文件操作方法,如打开、关闭、读取和写入等。

下面深入理解QFile:

1.QFile的构造函数

QFile的构造函数有两个参数,一个是文件的名字,另一个是父对象指针。

QFile::QFile(const QString &name, QObject *parent = nullptr)

2.QFile的打开与关闭

使用open()方法可以打开一个文件,close()方法可以关闭文件。

bool open(OpenMode mode) void close()

其中open()方法的参数是打开模式,常见的打开模式有:

  • QIODevice::ReadOnly:只读模式
  • QIODevice::NotOpen: 设备未打开。
  • QIODevice::ReadOnly: 只读模式,只能读取数据。
  • QIODevice::WriteOnly: 只写模式,只能写入数据。
  • QIODevice::ReadWrite: 读写模式,既可以读取也可以写入数据。
  • QIODevice::Append: 以附加方式打开,即写入数据时不覆盖已有数据,而是添加到文件末尾。
  • QIODevice::Truncate: 打开文件时截断文件,即将文件长度设置为0。
  • QIODevice::Text: 文本模式,自动转换文本文件的换行符(例如\n转换为\r\n)。
  • QIODevice::Unbuffered: 不使用缓冲区,直接读取或写入底层设备。

3.QFile的读写

QFile的读写方法有很多种,常用的有read()、write()、readLine()等。

qint64 read(char *data, qint64 maxSize) 
qint64 write(const char *data, qint64 maxSize) 
QByteArray readAll() QString readLine(qint64 maxSize = 0)

其中read()方法用于读取数据到指定的缓冲区中,write()方法用于将数据写入文件。readAll()方法可以一次性读取整个文件内容到一个QByteArray对象中,而readLine()方法则用于读取一行数据(以换行符为结束标志)。

4.QFile的属性

QFile还提供了一些属性用于获取文件的相关信息,比如文件名、路径、大小等。

QString fileName() const QString filePath() const qint64 size() const

5.QFile的错误处理

在使用QFile时,可能会出现一些错误,比如文件不存在、文件无法打开等。QFile提供了error()方法和errorString()方法用于处理这些错误。

QFile::FileError error() const QString errorString() const

其中error()方法返回一个枚举值,表示当前文件的错误状态,而errorString()方法则返回一个字符串,表示当前文件的错误信息。

举例:利用QFile读和写文本文件

#include 
#include   //文件操作
#include int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//创建QFile对象,指定操作的相关文件QFile qfile("d:/filewrite.txt");//写入数据到文件//打开文件 以只写和文本模式打开/*QIODevice::NotOpen: 设备未打开。QIODevice::ReadOnly: 只读模式,只能读取数据。QIODevice::WriteOnly: 只写模式,只能写入数据。QIODevice::ReadWrite: 读写模式,既可以读取也可以写入数据。QIODevice::Append: 以附加方式打开,即写入数据时不覆盖已有数据,而是添加到文件末尾。QIODevice::Truncate: 打开文件时截断文件,即将文件长度设置为0。QIODevice::Text: 文本模式,自动转换文本文件的换行符(例如\n转换为\r\n)。QIODevice::Unbuffered: 不使用缓冲区,直接读取或写入底层设备。*/if(!qfile.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"文件打开失败,请重新检查";}qDebug()<<"文件打开成功";//向打开的文件写入数据qfile.write("梳着中分 穿着背带\n");qfile.write("动态图片 快点苏珊\n");qfile.write("谁唱跳rap不凡\n");qfile.write("谁练习了两年半\n");qfile.write("到后来\n");qfile.write("鸡舍下蛋\n");//关闭文件qfile.close();//从文件读取数据if(!qfile.open(QIODevice::ReadOnly|QIODevice::Text)){qDebug()<<"文件打开失败,请重新检查";}qDebug()<<"文件打开成功 (读取文件)";//定义字符指针char *qstr=new char[200];qint64 count = qfile.readLine(qstr,200);while (count!=0 && count !=-1) {  //count为0文件结尾  count为-1读取失败qDebug()<

利用QFile读和写二进制文件

#include 
#include 
#include int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//将qnumber中的数写入到文件qint32 qnumber[3]={1,2,3};//将qnumber以二进制的方式存储到字节数组当中QByteArray qbtye_arr;//设置字节数组的大小qbtye_arr.resize(sizeof (qnumber));for(int i =0;i<3;i++){//for循环利用指针将每个整数拷贝到字节数组中//参数dest:目标地址,即要将数据拷贝到哪里。src:源地址,即要从哪里开始拷贝数据。n:要被拷贝的字节数。memcpy(qbtye_arr.data()+i*sizeof (qint32),&qnumber[i],sizeof (qint32));}//创建文件对象 打开文件QFile qfile("d:/qfile.dat");if(!qfile.open(QIODevice::WriteOnly)){qDebug()<<"打开失败";}qDebug()<<"打开成功";qfile.write(qbtye_arr);qfile.close();//读取二进制数据if(!qfile.open(QIODevice::ReadOnly)){qDebug()<<"打开失败";}qDebug()<<"打开成功(读取)";//读取所有二进制数据到字节数组里QByteArray qbytearr1=qfile.readAll();qDebug()<

QTextStream 

它可以从文件、套接字和其他输入源读取文本,并将文本写入文件、套接字和其他输出目标中。QTextStream支持Unicode编码,并提供了各种读写方法,

利用QTextStream进行文本文件操作

#include 
#include 
#include 
#include  //文本文件操作int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//创建QFile对象,指定操作的相关文件QFile qfile("d:/textfilewrite.txt");//写入数据到文件//打开文件 以只写和文本模式打开if(!qfile.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"文件打开失败,请重新检查";}qDebug()<<"文件打开成功";//创建写入文本文件流QTextStream qtextstreamwrite(&qfile);qtextstreamwrite<<(QString)"梳着中分 穿着背带\n";qtextstreamwrite<<(QString)"动态图片 快点苏珊\n";qtextstreamwrite<<(QString)"谁唱跳rap不凡\n";qtextstreamwrite<<(QString)"谁练习了两年半\n";qtextstreamwrite<<(QString)"到后来\n";qtextstreamwrite<<(QString)"鸡舍下蛋\n";qfile.close();//打开文件 以只读和文本模式打开if(!qfile.open(QIODevice::ReadOnly|QIODevice::Text)){qDebug()<<"文件打开失败,请重新检查";}qDebug()<<"文件打开成功";//创建读文本文件流QTextStream qtextstreamread(&qfile);while (!qtextstreamread.atEnd()) { //判断是否读到结尾QString str;qtextstreamread>>str;qDebug()<

QDataStream 

用于在应用程序之间传输二进制数据。它允许以特定格式读取和写入二进制数据,如整数、浮点数、字符串等。QDataStream可以跨平台使用,并支持大多数操作系统和体系结构。常用于实现网络通信、文件读写等功能。

利用QDataStream进行二进制文件操作

#include 
#include 
#include 
#include int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//将qnumber中的数写入到文件qint32 qnumber[3]={1,2,3};//将qnumber以二进制的方式存储到字节数组当中QByteArray qbtye_arr;//设置字节数组的大小qbtye_arr.resize(sizeof (qnumber));for(int i =0;i<3;i++){//for循环利用指针将每个整数拷贝到字节数组中//参数dest:目标地址,即要将数据拷贝到哪里。src:源地址,即要从哪里开始拷贝数据。n:要被拷贝的字节数。memcpy(qbtye_arr.data()+i*sizeof (qint32),&qnumber[i],sizeof (qint32));}//创建文件对象 打开文件QFile qfile("d:/datafile.dat");if(!qfile.open(QIODevice::WriteOnly)){qDebug()<<"打开失败";}qDebug()<<"打开成功";//创建写入二进制文件流QDataStream qdatastreamwrite(&qfile);qdatastreamwrite<>qbytearr1;qDebug()<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章