当前位置: 代码迷 >> QT开发 >> 请教如何用 QDataStream 读取bin文件
  详细解决方案

请教如何用 QDataStream 读取bin文件

热度:587   发布时间:2016-04-25 03:32:20.0
请问怎么用 QDataStream 读取bin文件
 如题,
    QFile *loadFile=new QFile(loadFile_name);
    QDataStream in(loadFile);
    if(!loadFile->open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(this,"Error","Cann't open file",QMessageBox::Ok);
        ui->textEdit->insertPlainText(QString("open %1 failed\n").arg(loadFile_name));
        auto_scroll();
        return;
    }
    dataLen=in.readRawData(dataBuf,1024*200); //其中dataBuf为char类型预先申请的空间

请问 各位老大,采用上述的方法能够读取*.bin文件中的数据么?

------解决方案--------------------
文件的后缀并不能说明什么,除了大家约定俗成的文件格式,例如png、jgp等
这里楼主的代码是可以读出文件的,是以二进制的形式读出的,数据没有编码。
但数据具体代表什么还需要你对这里的bin文件具体怎么定义的有了解。

另外你可以根据dataLen的值来判断读取是否成功,没有成功dataLen=-1,成功dataLen=读取的字节数。

参考assistant:
int QDataStream::readRawData ( char * s, int len )
Reads at most len bytes from the stream into s and returns the number of bytes read. If an error occurs, this function returns -1.
The buffer s must be preallocated. The data is not encoded.
See also readBytes(), QIODevice::read(), and writeRawData().

------解决方案--------------------
除非你能确定这个bin文件是用 QDataStream生成的,否则不建议使用QDataStream
------解决方案--------------------
文件操作还是直接用C++的ifstream来读取,比较qt的简单得多。
    file.open("test.bin",ios::binary
------解决方案--------------------
ios::ate);
    int size=file.tellg(); //通过标志ate得到文件大小。
    char* buf=new char[size];
    file.seekg(0,ios::beg); //把读取位置重新写入文件开头。
    file.read(buf,size);
    file.close();