优秀的编程知识分享平台

网站首页 > 技术文章 正文

利用 WebRequest和WebResponse下载文件C#

nanyue 2024-10-11 13:33:46 技术文章 24 ℃
  • // 记得添加下面的using申明
  • // using System.Net;
  • // using System.IO;
  • public static int DownloadFile(String remoteFilename,
  • String localFilename)
  • {
  • // 这个函数的功能是返回下载文件过程中一共有多少字节被处理了
  • // 初始化被处理为0字节
  • int bytesProcessed = 0;
  • // 初始化remoteStream,localStream,response

  • Stream remoteStream = null;
  • Stream localStream = null;
  • WebResponse response = null;
  • // 用 try/catch/finally 块去捕获WebRequest 和Stream异常

  • try
  • {
  • // 为网址创建request
  • WebRequest request = WebRequest.Create(remoteFilename);
  • if (request != null)
  • {
  • // 把 request 请求发送到服务器返回WebResponse
  • response = request.GetResponse();
  • if (response != null)
  • {
  • // 返回WebResponse后,取回数据流

  • remoteStream = response.GetResponseStream();
  • // 创建本地文件
  • localStream = File.Create(localFilename);
  • // 分配1kb缓冲区
  • byte[] buffer = new byte[1024];
  • int bytesRead;
  • // 用do/while loop 循环读取数据流,直到数据流没有数据返回为止
  • do
  • {
  • // 从流里面读取数据(最大1kb)
  • bytesRead = remoteStream.Read (buffer, 0, buffer.Length);
  • // 把收到的数据写入到当地文件
  • localStream.Write (buffer, 0, bytesRead);
  • // 把被处理过的字节加在一起
  • bytesProcessed += bytesRead;
  • } while (bytesRead > 0);
  • }
  • }
  • }
  • catch(Exception e)
  • {
  • Console.WriteLine(e.Message);
  • }
  • finally
  • {
  • // 关闭 response 和streams 对象
  • // 确保所有对象都已经被关闭了。
  • if (response != null) response.Close();
  • if (remoteStream != null) remoteStream.Close();
  • if (localStream != null) localStream.Close();
  • }
  • // 返回一共多少字节被处理了
  • return bytesProcessed;
  • }
  • 调用方法:

  • int read = DownloadFile("http://www.mysite.com/problem1.jpg","d:\\test.jpg");
  • Console.WriteLine("一共写了{0} 字节", read);

  • 最近发表
    标签列表