CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

发送文件 并显示进度的问题

楼主coolzdp(unreal张师傅)2004-12-04 17:21:32 在 VC/MFC / 网络编程 提问

用以下代码实现发送文件并在进度条上显示发送进度  
  ====================================================  
  char   buffer[BUFFERSIZE];  
  DWORD   dwFileSizeSend   =   0; //已发送数据的大小  
  DWORD   dwRead; //读出的数据大小  
  BOOL   fRead;  
  int   length;  
  int   nProgressPos;  
  for(;;)  
  {  
  fRead   =   ReadFile(hFile,buffer,sizeof(buffer),&dwRead,NULL);  
  if(!fRead) //读失败  
  {  
  AfxMessageBox("send读文件失败");  
  closesocket(sock);  
  CloseHandle(hFile);  
  return   -1;  
  }  
  if(dwRead   ==   0) //文件结束  
  break;  
  dwFileSizeSend   =   dwFileSizeSend   +   dwRead;  
  nProgressPos   =   (int)(dwFileSizeSend   *   100   /   myFileInfo.dwFileSize);  
  gpControlProgressSendFile->SetPos(nProgressPos);  
  length=send(sock,buffer,dwRead,0);  
  if(length<=0)  
  {  
  break;  
  }  
  }  
  ===================================  
  发送一个40M的文件时进度条显示正常,  
  发送一个100M的文件时进度条走到约1/3后又返回到0,接着走,又到1/3,循环直到结束。  
  弄了半天不大明白,请教!  
   
  另外我传送文本文件正常,传送rm格式的电影就只能播放开头的一点,  
  然后就不能放了。[在本机上用127.0.0.1接受则播放正常!],  
  不知是什么原因阿! 问题点数:30、回复次数:2Top

1 楼qrlvls( 空 气 )回复于 2004-12-04 17:25:08 得分 15

进度条返回的原因可能是乘以100后超过大小  
  DWORD   是   32   位的值,所以可以表示   0   ~   4294967295  
  100M   =   100   *   1024   *   1024   =   104857600  
  所以   100M   *   100   =   10485760000   >   4294967295  
  你应该  
  nProgressPos   =   (int)(dwFileSizeSend   *   100.0   /   myFileInfo.dwFileSize)  
                                                                                \__>   100   改成   100.0  
  就可以了Top

2 楼qrlvls( 空 气 )回复于 2004-12-04 17:26:31 得分 15

DWORD   *   100   为整数,超过   32   位表示范围  
  而   100.0   是双精度数,所以   dwFileSizeSend   *   100.0   的结果是双精度数  
   
  这里你还犯了一个错误  
  记住   整数除以整数结果还是整数  
   
  double   a   =   4   /   3;  
  结果应该是   1.0   而不是   1.3333。Top

相关问题

  • 上传文件进度显示
  • 用进度条显示发送邮件的进度
  • vb中怎样显示copy文件时的进度条呀?
  • InstallShield v6.22中如何显示拷贝文件的进度条?
  • 关于用进度条显示复制文件!急
  • 关于用进度条显示复制文件!急
  • 讨论:文件上传如何显示进度???(高手请进)
  • 如何实现文件下载及显示其进度?
  • 上传文件时如何显示上传的进度?
  • 上传文件进度显示?五星急*****

关键词

  • 文件
  • dwfilesizesend
  • nprogresspos
  • dwread
  • 进度
  • 整数
  • 发送
  • fread
  • 结果
  • buffer

得分解答快速导航

  • 帖主:coolzdp
  • qrlvls
  • qrlvls

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo