/// <summary> 
/// 下载文件到指定目录,并返回下载后存放的文件路径 
/// </summary> 
/// <param>网址</param> 
/// <param>存放目录,如果该目录中已存在与待下载文件同名的文件,那么将自动重命名</param> 
/// <returns>下载文件存放的文件路径</returns> 
public string 下载文件(Uri Uri, string 存放目录) 
{ 
var q = WebRequest.Create(Uri).GetResponse(); 
var s = q.GetResponseStream(); 
var b = new BinaryReader(s); 
var file = 生成下载文件存放路径(存放目录, Uri, q.ContentType); 
FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write); 
fs.Write(b.ReadBytes((int)q.ContentLength), 0, (int)q.ContentLength); 
fs.Close(); 
b.Close(); 
s.Close(); 
return file; 
} 
代码很简单,就不多说了,我们来完成最后的测试:
复制代码 代码如下:
 
[TestMethod] 
public void 文件下载测试() 
{ 
var d = @"C:\Users\Public\Downloads"; 
//首次下载 
Assert.AreEqual(@"C:\Users\Public\Downloads\filedownload.dhtml", 下载文件(new Uri("http://www.uushare.com/filedownload?user=icesee&id=2205188"), d)); 
//第二次下载,遇到同名文件,自动重命名 
Assert.AreEqual(@"C:\Users\Public\Downloads\filedownload(1).dhtml", 下载文件(new Uri("http://www.uushare.com/filedownload?user=icesee&id=2205188"), d)); 
//下载一个原本是gif类型的文件 
Assert.AreEqual(@"C:\Users\Public\Downloads\2naqyw8.gif", 下载文件(new Uri("http://i38.tinypic.com/2naqyw8.jpg"), d)); 
} 
结语
相较WebClient而言,WebRequest拥有更好的可控性,在WebClient无解的时候,就尝试让WebRequest上场吧。
范例源代码和本文的XPS版本打包下载
转载
您可能感兴趣的文章:
