第一种:QFile + QDataStream 结合 qt预定义的编码 流的方式
读: >>
写:<<
注意:必须调用setversion函数设置流版本号,读写流版本号相同,或者读高于写。
特点:采用qt预定义的编码
缺点:也正是因为采用qt预定义的编码,其他编码语言不兼用。不是标准用法。
写二进制文件
QFile file("F:/1.txt");
if(!file.open(QIODevice::WriteOnly))
{
qDebug() << "Can't open file for writing";
return 0;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_5_7);
out << int(12) << QByteArray("123");
file.close();
读二进制文件
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "Cannot open file for reading: ";
return 0;
}
QDataStream in(&file);
in.setVersion(QDataStream::Qt_5_7);
int n;
QByteArray s;
in >> n >> s;
file.close();
qDebug() << n << s;
第二种:标准编码文件 也是QFile + QDataStream 结合
也有2种函数方式实现:
第一种方式:
//向文件流连续写入len个字节的数据,这个只写入数据,不写入数据大小到文件
int writeRawData(const char *, int len);
int readRawData(char *, int len);
//写文件
if(file.open(QIODevice::WriteOnly))
{
QDataStream out(&file);
char data[256];
memset(data,0,256*sizeof(char));
char* p = "this is QDataStream demo";
strcpy(data,p);
out.writeRawData(data,256);
file.close();
}
//读文件
if(file.open(QIODevice::ReadOnly))
{
QDataStream out(&file);
char data[256];
memset(data,1,256*sizeof(char));
out.readRawData(data,256);
qDebug()<<data;
file.close();
}
第二种方式:
//适合于写入字符串数据,先写入字符串的长度到文件,再写入字符串到文件。
QDataStream &writeBytes(const char *, uint len);
QDataStream &readBytes(char *&, uint &len);
写文件
if(file.open(QIODevice::WriteOnly))
{
QDataStream out(&file);
char data[256];
memset(data,0,256*sizeof(char));
char* p = "this is QDataStream demo";
strcpy(data,p);
out.writeBytes(data,256);
file.close();
}
读文件
if(file.open(QIODevice::ReadOnly))
{
QDataStream out(&file);
char *data;
uint len;
out.readBytes(data,len);
if(len > 0)
{
qDebug()<<data;
delete[] data;
}
file.close();
}