HTTP下载文件问题

88csdn 2009-01-21 11:28:21
我用Http去下载服务器上的mp3,代码大致如下:
private bool DownloadMp3(string url, long start, long end, string path)
{
HttpWebRequest httpRequestIm;
HttpWebResponse httpResponseIm;
Stream respStreamIm;
httpRequestIm = (HttpWebRequest)WebRequest.Create(url);
httpRequestIm.Method = "GET";
httpRequestIm.AddRange((int)start, (int)end);
try
{
httpResponseIm = (HttpWebResponse)httpRequestIm.GetResponse();
if (httpResponseIm.StatusCode == HttpStatusCode.OK || httpResponseIm.StatusCode == HttpStatusCode.PartialContent)
{
respStreamIm = httpResponseIm.GetResponseStream();
long length = httpResponseIm.ContentLength;
byte[] b = new byte[Convert.ToInt32(length)];
int nReadSize = 0;
nReadSize = respStreamIm.Read(b, 0, Convert.ToInt32(length));
while (nReadSize > 0)
{
if(Stop)
return false;
//写文件
}
}
}
catch{}
finally
{
if (respStreamIm != null)
{
respStreamIm.Close();//中途停止下载的话,这句时间很长很长
respStreamIm = null;
}
if (httpResponseIm != null)
{
httpResponseIm.Close();
httpResponseIm = null;
}
if (httpRequestIm != null)
{
httpRequestIm.Abort();
httpRequestIm = null;
}
if (ms != null)
{
ms.Close();
ms = null;
}
}
}

现在的问题是,如果在下载过程中打断下载(Stop为true)就会跑respStreamIm.Close(),但是respStreamIm.Close()的时候时间很长很长,而且一次请求的数据越多,Close的时候需要的时间就越长!!!!!
已经确定在Close之前还是会下载完所有的数据,之后才能继续运行!很不明白.net cf为什么要这样做~~~望高人指点如何解决此问题,谢谢~~~
如果打断当前下载再去下载另一个时,会等待很长时间。而多线程去下载也不行,前面的没有关闭的话,后面的下载会超时~~~
...全文
161 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
WLFIGHTER 2009-03-13
  • 打赏
  • 举报
回复
long length = httpResponseIm.ContentLength;
byte[] b = new byte[Convert.ToInt32(length)];
感觉如果下载的文件太大,length变成int的时候会溢出
WLFIGHTER 2009-03-13
  • 打赏
  • 举报
回复
long length = httpResponseIm.ContentLength;
byte[] b = new byte[Convert.ToInt32(length)];
感觉如果下载的文件太大,length变成int的时候会溢出
derfson2006 2009-01-23
  • 打赏
  • 举报
回复
respStreamIms使用异步read(BeginRead)试试
88csdn 2009-01-23
  • 打赏
  • 举报
回复
谢谢各位,我已经改成异步了~~~
稍后测试一下结贴~~~
btsy2000 2009-01-22
  • 打赏
  • 举报
回复
keep focus and up
88csdn 2009-01-22
  • 打赏
  • 举报
回复
异步同样会在respStreamIm.Close();或httpRequestIm.Abort();上停留很长时间啊~~~
88csdn 2009-01-21
  • 打赏
  • 举报
回复
不行,我试了,这三句哪个在第一位哪个就很长时间
儿大不由爷 2009-01-21
  • 打赏
  • 举报
回复
把 httpRequestIm.Abort(); 放到前面呢
北方大冬瓜 2009-01-21
  • 打赏
  • 举报
回复
你这是同步实现,要停止快的话需要用异步 Socket

7,659

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧