2007年8月29日星期三

[陈浩原创]fread网络发送文件fwrite后,MD5不同的问题

  
  呵呵,其实这个问题蛮简单的,就是有时候感觉不到而已。我在客户端代码大致如下:

  1. //3 把文件分段传输
  2. memset(&asp,0,sizeof(asp));
  3. FILE *f=fopen(localFilename,"rb");
  4. unsigned int count=0;
  5. while (asp.transfer.len= fread(&asp.transfer.data,1,TRANSFER_CAPACITY,f))
  6. {
  7. asp.datatype=_DataType_Transfer_;
  8. asp.transfer.id=++count;
  9. SendPacket();
  10. memset(&asp,0,sizeof(asp));
  11. RecvPacket();
  12. memset(&asp,0,sizeof(asp));
  13. }
  14. fclose(f);
  我接收端代码是:
file=fopen(request.filename,"w");
。。。
fwrite(asp.transfer.data,1,asp.transfer.len,file);
。。。
  这段代码怎么就是工作不正常的呢?
  我在Windows的记事本里看,两个文本文件显示的一模一样。但是放到Araxis Merge中发现,我接收到的文件都比原文件要多很多换行。源文件有一个换行,接受回来就是两个。。。

  这是怎么回事的呢?
  我传个文本文件就这个样子,那二进制的话,还怎么活啊?

  嘿嘿,可能问题出在“二进制”上面!
  尝试把接受代码改为
  file=fopen(request.filename,"wb");
  搞定!呵呵,貌似UNIX下面不需要这个b参数来表示二进制,但是Win下面是必需的。

没有评论: