成员方法 功 能
bool QDataStream::atEnd() const 判断是否读到文件末尾,如果已经达到末尾,返回 true,否则返回 false。
QDataStream &QDataStream::readBytes(char *&s, uint &l) 对于用 writeBytes() 方法写入文件的 l 和 s,只能使用 readBytes() 方法读取出来。
int QDataStream::readRawData(char *s, int len) 从文件中读取最多 len 字节的数据到 s 中,返回猜喊值表示实际读取的字节数。注意,调用该方法之前,需要先给 s 参数分配好内存空间。
void QDataStream::setVersion(int v) 不同版本的 Qt 中,同名称的数据类型也可能存在差异,通过调用此方法手动指定版本号,可以确保读取数据的一致性。
int QDataStream::skipRawData(int len) 跳过文件中的 len 个字节,返回实际跳过的字节数。
QDataStream &QDataStream::writeBytes(const char *s, uint len) 将长度 len 和 s 一起写入到文件中,对于 writeBytes() 写入的数据,只能用 readBytes() 方法读取。
int QDataStream::writeRawData(const char *s, int len) 将 s 中前 len 字节的数据写入文件,返回值表示成功写入的字节数。
QDataStream 类也对<<和>>进行了重载,举个简单的例子,用 QDataStream 重新实现实例二:
#include <QFile>
#include <QDebug>
#include <QDataStream>
int main(int argc, char *argv[])
{
//指孝困定要写入文件的数据
qint32 nums[5]={1,2,3,4,5}
QFile file("D:/demo.dat")
file.open(QIODevice::WriteOnly)
//创建 QDataStream 对象
QDataStream out(&file)
//将 nums 数组中的整数逐个写入到二进制文件中
for(int i=0i<巧兆念5i++){
out <<nums[i]
}
file.close()
//再次打开文件,读取文件中存储的二进制数据
file.open(QIODevice::ReadOnly)
QDataStream in(&file)
//读取二进制文件中的数据
while(!in.atEnd()){
//每次读取一个整数
qint32 num
in >>num
qDebug() <<num
}
return 0
}
这是声明的QDataStream的对象,代码自己声明的,并不是预定义的。谈雹它是一个流对象,你可以查看QDataStream的文档,继承自QIODevice,QDataStreamout(&block,QIODevice::WriteOnly)
这一句声明了out是一个QDataStream对象,将声明QByteArray的实例block最为存储缓冲区,模式为只写。烂侍信同样你去看代码in是一个只读流,将socket中的数据读出来的功能。in>>的意思是读出到blocksize中。和iostream很像,out和in都和网络饥轮模块没任何关系。
可以用 QTextStream 来打饥轿磨开txt具体写法QFile data("output.txt")//先构建一个QFile
if (data.open(QFile::WriteOnly)) //将file以只写方式打开
{
QTextStream out(&data)//如果QFile打帆渗开成功,再用QFile构建一个QTextStream
out <<"Result: " <<qSetFieldWidth(10) <<left <<3.14 <<2.7
// 写入 "Result: 3.14 2.7 "
}
//如果你要读取文件记得将打开属性改为QFile::ReadOnly或QFile::ReadWrite
//用readLind()函烂斗数.或read()函数,或>>符号可以读取文件内能.用atEnd()判断文件是否结尾
另外用QDataStream配合QIODevice同样可以高效读取txt文件.方法同QTextStream差不多.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)