第三十三课、文件流和数据流------------------狄泰软件学院
一、文件类型
1、Qt中将文件类型分为两大类
(1)、文本文件:文件内容是可读的文本字符
(2)、数据文件:文件内容是直接的二进制数据
2、QFile直接支持文本文件和数据文件的读写
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <QCoreApplication> #include <QFile> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QFile file("C:/Users/SantaClaus/Desktop/test.hex"); if (file.open(QIODevice::WriteOnly)) //打开方式:可读、二进制方式 { QString name = "SantaClaus"; double value = 3.14; //按二进制写入时,须进行类型转换,这也是QFile使用上比较麻烦的地方 file.write(name.toStdString().c_str()); //参数为char*,须转换 file.write(reinterpret_cast<char*>(&value), sizeof(value)); file.close(); } if(file.open(QIODevice::ReadOnly)) //只读、二进制方式 { QString name =""; double value = 0; //read的返回值为QByteArray,当赋值给QString变量类型时进行自动转换 //以下语句也可以写成name = file.read(10); name = QString(file.read(10)); file.read(reinterpret_cast<char*>(&value), sizeof(value)); file.close(); qDebug() << name; qDebug() << value; } return a.exec(); }
二、文本流和数据流
1、Qt提供辅助类简化了文本文件/数据文件的读写
(1)、QTextStream:写入的数据全部转化为可读文本
(2)、QDataStream:写入的数据根据类型转换为二进制
2、IO设备辅助类的使用方式
3、注意事项
(1)、不同的Qt版本的数据流格式可能不同
(2)、当数据流文本可能在不同版本的Qt程序间传递时,需要考虑版本问题
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <QtCore/QCoreApplication> #include <QDebug> #include <QTextStream> #include <QDataStream> #include <QString> #include <QFile> void textstream(QString f) { /*******1、创建QFile对象file************/ QFile file(f); /*******2、使用file对象打开文件************/ if(file.open(QIODevice::WriteOnly | QIODevice::Text)) { /*******3、将数据写入文件************/ QTextStream out(&file); out << QString("D.T.softwear") << endl; out << 3.15 << endl; file.close(); } if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { /*******4、将数据从文件中读出************/ QTextStream in(&file); while(! in.atEnd()) { qDebug() << in.readLine(); } file.close(); } } void datastream(QString f) { /*******1、创建QFile对象file************/ QFile file(f); /*******2、使用file对象打开文件************/ if(file.open(QIODevice::WriteOnly))//以二进制方式打开 { /*******3、将数据写入文件************/ QDataStream out(&file); out.setVersion(QDataStream::Qt_4_7);//指定版本号方便在不同版本Qt上传递数据 out << QString("D.T.softwear"); out << 3.15; file.close(); } if(file.open(QIODevice::ReadOnly)) { /*******4、将数据从文件中读出************/ QDataStream in(&file); QString s = ""; double d = 0; in.setVersion(QDataStream::Qt_4_7);//指定版本号方便在不同版本Qt上传递数据 in >> s; in >> d; file.close(); qDebug() << s; qDebug() << d; } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); textstream("F:/Qt/lesson33/text.txt"); datastream("F:/Qt/lesson33/text.dat"); return a.exec(); }
三、小结
(1)、Qt的文件辅助类用于方便读写操作
(2)、QTextStream用于文本数据的快速读写
(3)、QDataStream用于二进制数据的快速读写
(4)、QDataStream的文件格式与Qt版本相关
(5)、数据格式文件在程序间传递时,需要考虑版本问题