技术开发 频道

使用.NET实现断点续传

  完成文件访问

  System.IO.FileStream

  FileStream 对象支持使用Seek方法对文件进行随机访问, Seek 允许将读取/写入位置移动到文件中的任意位置。这是通过字节偏移参考点参数完成的。字节偏移量是相对于查找参考点而言的,该参考点可以是基础文件的开始、当前位置或结尾,分别由SeekOrigin类的三个属性表示。
代码实现

  了解了.NET提供的相关的类,那么,我们就可以方便的实现了。

  代码如下:

static void Main(string[] args)
{
 
string StrFileName="c:\\aa.zip"; //根据实际情况设置
  string StrUrl="http://www.xxxx.cn/xxxxx.zip"; //根据实际情况设置
 
//打开上次下载的文件或新建文件
 long lStartPos =0;
 System.IO.FileStream fs;
 
if (System.IO.File.Exists(StrFileName))
 {

 fs
= System.IO.File.OpenWrite(StrFileName);
 lStartPos
=fs.Length;
 fs.Seek(lStartPos,System.IO.SeekOrigin.Current);
//移动文件流中的当前指针
 }
 
else
 {
  fs
= new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
 lStartPos
=0;
 }
 
//打开网络连接
  try
 {
 System.Net.HttpWebRequest request
=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
 
if ( lStartPos>0)
 request.AddRange((
int)lStartPos); //设置Range值
 
//向服务器请求,获得服务器回应数据流
 System.IO.Stream ns= request.GetResponse().GetResponseStream();
 
byte[] nbytes = new byte[512];
 
int nReadSize=0;
 nReadSize
=ns.Read(nbytes,0,512);
 
while( nReadSize >0)
 {

 fs.Write(nbytes,
0,nReadSize);
 nReadSize
=ns.Read(nbytes,0,512);
 }
 fs.Close();
 ns.Close();
 Console.WriteLine(
"下载完成");
 }
 
catch(Exception ex)
 {
 fs.Close();
 Console.WriteLine(
"下载过程中出现错误:"+ex.ToString());
 }
 }
0
相关文章