public class WebDown
{
/// 下载文件方法
/// 文件保存路径和文件名
/// 返回服务器文件名
public static bool DeownloadFile(string sourceFile, string desFile)
{
bool flag = false;
long SPosition = ;
FileStream FStream = null;
Stream myStream = null;
string fileName = sourceFile.Substring(sourceFile.LastIndexOf(@"/") + );
if (desFile.EndsWith("\\"))
{
desFile = desFile + fileName;
}
else
{
desFile = desFile + "\\" + fileName;
}
try
{
//判断要下载的文件夹是否存在
if (File.Exists(desFile))
{
//打开上次下载的文件
FStream = File.OpenWrite(desFile);
//获取已经下载的长度
SPosition = FStream.Length;
long serverFileLength = GetHttpLength(sourceFile);
if (SPosition == serverFileLength)
{//文件是完整的,直接结束下载任务
return true;
}
FStream.Seek(SPosition, SeekOrigin.Current);
}
else
{
//文件不保存创建一个文件
FStream = new FileStream(desFile, FileMode.Create);
SPosition = ;
}
//打开网络连接
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(sourceFile);
if (SPosition > )
{
myRequest.AddRange(SPosition);             //设置Range值
}
//向服务器请求,获得服务器的回应数据流
myStream = myRequest.GetResponse().GetResponseStream();
//定义一个字节数据
byte[] btContent = new byte[];
int intSize = ;
intSize = myStream.Read(btContent, , );
while (intSize > )
{
FStream.Write(btContent, , intSize);
intSize = myStream.Read(btContent, , );
}
flag = true;        //返回true下载成功
}
catch (Exception ex)
{
SysLog.WriteTxtLog("下载文件时异常:" + ex.Message);
}
finally
{
//关闭流
if (myStream != null)
{
myStream.Close();
myStream.Dispose();
}
if (FStream != null)
{
FStream.Close();
FStream.Dispose();
}
}
return flag;
}
static long GetHttpLength(string url)
{
long length = ;
try
{
var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
req.Method = "HEAD";
req.Timeout = ;
var res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK)
{
length = res.ContentLength;
}
res.Close();
return length;
}
catch (WebException wex)
{
return ;
}
}
}

C#文件下载(实现断点续传)的更多相关文章

  1. 【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控

    参考上篇文章: <[SFTP]使用Jsch实现Sftp文件下载-支持断点续传和进程监控>:http://www.cnblogs.com/ssslinppp/p/6248763.html  ...

  2. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

  3. iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)

    前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...

  4. iOS 文件下载及断点续传

    ios的下载我们可以使用的方法有:NSData.NSURLConnection.NSURLSession还有第三方框架AFNetworking和ASI 利用NSData方法和NSURLConnecti ...

  5. 【转】iOS 文件下载及断点续传

    ios的下载我们可以使用的方法有:NSData.NSURLConnection.NSURLSession还有第三方框架AFNetworking和ASI 利用NSData方法和NSURLConnecti ...

  6. C# 文件下载之断点续传

    注意,本文所说的断点续传特指 HTTP 协议中的断点续传.本文主要聊聊思路和关键代码,更多细节请参考本文附带的 demo. 工作原理 HTTP 协议中定义了一些请求/响应头,通过组合使用这些头信息.我 ...

  7. Winform文件下载之断点续传

    在本系列的前两篇文章中,分别向大家介绍了用于完成下载任务的 WebClinet 和 WinINet 的基本用法和一些实用技巧. 今天来为大家讲述下载过程中最常遇到的断点续传问题. 首先明确一点,本文所 ...

  8. php大文件下载支持断点续传

    <?php   /** php下载类,支持断点续传  *  *   Func:  *   download: 下载文件  *   setSpeed: 设置下载速度  *   getRange: ...

  9. PHP超大文件下载,断点续传下载

    源代码: <?php $sourceFile = "1.tmp"; //要下载的临时文件名 $outFile = "用户订单.xls"; //下载保存到客 ...

  10. Java单线程文件下载,支持断点续传功能

    前言: 程序下载文件时,有时会因为各种各样的原因下载中断,对于小文件来说影响不大,可以快速重新下载,但是下载大文件时,就会耗费很长时间,所以断点续传功能对于大文件很有必要. 文件下载的断点续传: 1. ...

随机推荐

  1. 安装 mysql-5.6.4-m7

    1.首先下载:http://cdn1.mydown.yesky.com/soft/201403/mysql-5.6.4-m7.tar.gz 2.解压,进入目录,执行cmake ./(如果没有cmake ...

  2. JAVA i++于++i的区别

    大家看一下下面一个程序: 一.问题说明 Test.java public class Test { public static void main(String[] args) { int i = 1 ...

  3. windows安装python2.7后的注册(registry)问题

    [提要]win平台上,python2.7官网的安装包在安装后不会添加环境变量且不会把安装信息写入注册表. 把python和pip的安装路径添加到环境变量是做python开发必要的一步,而写入注册表的原 ...

  4. vue 构建版本 选择

    1.vue构建版本 vue构建版本分为:UMD.CommonJS和ES Module 三种. https://cn.vuejs.org/v2/guide/installation.html 区别: 所 ...

  5. Dubbo源码解读:appendAnnotation [01]

    import java.lang.reflect.Method; public class AppendAnnotation { /** * 获取某个Annotation实例的所有方法值(实际是Ann ...

  6. txt文件匹配脚本

    # -*- coding:utf-8 -*- import time start = time.clock() data=open("Data.txt","r" ...

  7. python之模块ftplib(实现ftp上传下载代码)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(实现ftp上传下载代码) #需求:实现ftp上传下载代码(不含错误处理) f ...

  8. Lotusscript统计在线用户数

    使用notessession的SendConsoleCommand方法向服务器控制台发送“show inetusers”命令,该命令返回一个结果(字符串),字符串类似如下: admin   192.1 ...

  9. shell笔记-算术运算

    算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...

  10. SQL SERVER 2008 “阻止保存要求重新创建表的更改”

    在SQL SERVER2008中,新建数据表以后,若再对该表进行更改,则会出现警告信息“不允许保存更改 阻止保存要求重新创建表的更改”,等等,需要进行一下设置: 工具--->选项--->D ...