qt读写二进制文件

第一种: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();
        }

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值