• 9996阅读
  • 7回复

QDataStream无法读取二进制文件 [复制链接]

上一主题 下一主题
离线zzh
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-26
QString e,e1;
QByteArray c,c1;

QCryptographicHash md(QCryptographicHash::Md5);

QFile data("1.exe");
if (data.open(QIODevice::ReadOnly)) {
     QDataStream out(&data);
    
     out >> e1;

}
  if(!e1.isEmpty()){
    c.append(e1);
    
     md.addData(c);
     c1 = md.result();
      e.append(c1.toHex());
      b1->setText(e);
}
}

我想读取一个二进制文件,然后计算它的MD5值,但发现程序读的数据是空的,也就是E1是空的,尝试过读图片,还有编译后的.o文件,还有就是EXE文件,都不能成功读入,请各位帮忙看看,谢谢了。
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-26
因为 QDataSteam 不是这么用的,具体可以看其manual。

另外,你这种情况不需要用 QDataStream,直接用 QFile 更好些。
描述:一个例子,供参考
附件: md5.tar.gz (3 K) 下载次数:67
离线zzh

只看该作者 2楼 发表于: 2009-11-27
也就是说不停的从文件读数据,然后不停的用QCryptographicHash类的addData写数据,最后QCryptographicHash对象在得到完整的数据后,再计算MD5值。

我是按照qt/html/qdatastream.html文档的例子写的,看来你比官方还专业,厉害,佩服,谢谢~
离线dbzhang800

只看该作者 3楼 发表于: 2009-11-27
引用第2楼zzh于2009-11-27 10:33发表的  :
也就是说不停的从文件读数据,然后不停的用QCryptographicHash类的addData写数据,最后QCryptographicHash对象在得到完整的数据后,再计算MD5值。
我是按照qt/html/qdatastream.html文档的例子写的,看来你比官方还专业,厉害,佩服,谢谢~


Qt的文档是最权威的

你的问题出在对 QDataStream 的理解上,说实话我都怀疑你都没看过手册中这一页 http://qt.nokia.com/doc/4.5/datastreamformat.html

至于我写的例子中采用 QFile 不停调用 read 不是必须的,如果确定你的文件不太大,可以调用read一次性读进来,然后处理。(但,当文件很大时,一次性读进内存显然就不合适了,比如1个600多M的 iso,或者 几个G的 DVD文件)
[ 此帖被dbzhang800在2009-11-27 10:45重新编辑 ]
离线zzh

只看该作者 4楼 发表于: 2009-11-27
http://qt.nokia.com/doc/4.5/qdatastream.html
有一个示例
Example (read binary data from a stream):

QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);    // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a;
完全在文档中复制来的,文档里就是这么做的,可能是理解错了。
离线dbzhang800

只看该作者 5楼 发表于: 2009-11-27
引用第4楼zzh于2009-11-27 17:05发表的  :
http://qt.nokia.com/doc/4.5/qdatastream.html
有一个示例
Example (read binary data from a stream):
QFile file("file.dat");
.......


maual 中 这个例子的前面几行已经给出了一个写文件的例子,只有用这段代码写入的文件才能用你贴的这个正确读入

至于为啥会这样,怎么处理 QString 、QByteArray等,手册都说得很清楚了。
离线zzh

只看该作者 6楼 发表于: 2009-11-27
实在不好意思,小弟英文实在不咋地,有很多东西都看不懂,小弟从此决定恶补英文。
离线mosjin
只看该作者 7楼 发表于: 2010-02-20
精灵实验室  jinLab | jinniLab
Enjoy Programming & Life!
http://jinLab.com | http://jinniLab.com
快速回复
限100 字节
 
上一个 下一个