学习自唐佐林老师的Qt
总结:
1 使用QFile类的write(),read()直接将字节类数据写入文本文件和数据文件需要类型转换。
2 QTextStream 使用:辅助类对象 ,写入辅助类对象的数据全部转换为可读文本,并用IO设备对象地址对其初始化,以指定类型读出数据
3 QDataStream 使用:辅助类对象 ,写入辅助类对象的数据全部转换为二进制数据,并用IO设备对象地址对其初始化,以指定类型读出数据
write()
read()
所操作的是对象必须是直接的字节类数据,如果直接用QFile的 write(),read()操作 非字节类数据,则需要类型转换,比较麻烦。
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("D:/work/QT_TEST/qt/code/33-2/test.hex");
//并没有注明以文本方式打开文件,则默认为以二进制方式打开文件
if( file.open(QIODevice::WriteOnly) )
{
QString dt = "D.T.Software";
double value = 3.14;
/*write所操作的数据必须是直接的字节类型数据char
QString dt:字符换类 先转换为标准的字符串类型,再转换为直接的二进制数据
reinterpret_cast<char*>(&value): 转换为直接的字节类型数据 char*,即指向字节类型数据
write(const char* data,qint64 maxSize);
write(const char* data);
*/
file.write(dt.toStdString().c_str());
file.write(reinterpret_cast<char*>(&value), sizeof(value));
file.close();
}
if( file.open(QIODevice::ReadOnly) )
{
QString dt = "";
double value = 0;
dt = QString(file.read(12));
file.read(reinterpret_cast<char*>(&value), sizeof(value));
file.close();
qDebug() << dt;
qDebug() << value;
}
return a.exec();
}
实验:
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>
void text_stream_test(QString f)
{
QFile file(f);
if( file.open(QIODevice::WriteOnly | QIODevice::Text) )
{
//创建辅助类对象 ,写入的数据全部转换为可读文本,并用IO设备对象地址对其初始化
QTextStream out(&file);
//向辅助类对象写数据
out << QString("D.T.Software") << endl;
out << QString("Result: ") << endl;
out << 5 << '*' << 6 << '=' << 5 * 6 << endl;
file.close();
}
if( file.open(QIODevice::ReadOnly | QIODevice::Text) )
{
QTextStream in(&file);
//判断有没有读到文件末尾
while( !in.atEnd() )
{
QString line = in.readLine();//读取一行
qDebug() << line;
}
file.close();
}
}
void data_stream_test(QString f)
{
QFile file(f);
if( file.open(QIODevice::WriteOnly) )
{
//创建辅助类对象 ,写入的数据根据类型转换为二进制数据,并用IO设备对象地址对其初始化
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_7);
//将内容输出到一个外部的二进制文件中
out << QString("D.T.Software");
out << QString("Result: ");
out << 3.14;
file.close();
}
if( file.open(QIODevice::ReadOnly) )
{
QDataStream in(&file);
QString dt = "";
QString result = "";
double value = 0;
in.setVersion(QDataStream::Qt_4_7);
//通过文件辅助对象 将二进制文件中的二进制数据 传出
in >> dt;
in >> result;
in >> value;
file.close();
qDebug() << dt;
qDebug() << result;
qDebug() << value;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
text_stream_test("C:/Users/hp/Desktop/text.txt");
data_stream_test("C:/Users/hp/Desktop/data.dat");
return a.exec();
}