一、文件类型
1、Qt中将文件类型分为两大类
(1)、文本文件:文件内容是可读的文本字符
(2)、数据文件:文件内容是直接的二进制数据
2、QFile直接支持文本文件和数据文件的读写
main.cpp
#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();
}
main.cpp
二、文本流和数据流
1、Qt提供辅助类简化了文本文件/数据文件的读写
(1)、QTextStream:写入的数据全部转化为可读文本
(2)、QDataStream:写入的数据根据类型转换为二进制
2、IO设备辅助类的使用方式
3、注意事项
(1)、不同的Qt版本的数据流格式可能不同
(2)、当数据流文本可能在不同版本的Qt程序间传递时,需要考虑版本问题
main.cpp
#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();
}
main.cpp
三、小结
(1)、Qt的文件辅助类用于方便读写操作
(2)、QTextStream用于文本数据的快速读写
(3)、QDataStream用于二进制数据的快速读写
(4)、QDataStream的文件格式与Qt版本相关
(5)、数据格式文件在程序间传递时,需要考虑版本问题