1.c#断点续传下载文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;namespace DownLoadFile
{public partial class Form1 : Form{public Form1(){InitializeComponent();}string strName = "";//记录要下载的文件名private void Form1_Load(object sender, EventArgs e){try{//监视剪贴板是否有数据string strPath = Clipboard.GetData(DataFormats.Text).ToString();//验证网址格式if (Regex.IsMatch(strPath, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?")){textBox1.Text = strPath;strName = strPath.Substring(strPath.LastIndexOf("/") + 1);}//读取文件存放的默认路径textBox2.Text = ReadString("SysSet", "RootPath", "", Application.StartupPath + "\\SysSet.ini");textBox3.Text = strName;}catch { }}//下载文件private void button1_Click(object sender, EventArgs e){if (textBox2.Text.EndsWith("\\"))DownloadFile(textBox2.Text + strName, textBox1.Text);elseDownloadFile(textBox2.Text + "\\" + strName, textBox1.Text);}//选择存放路径,并存储到INI文件中private void button4_Click(object sender, EventArgs e){folderBrowserDialog1.SelectedPath = ReadString("SysSet", "RootPath", "", Application.StartupPath + "\\SysSet.ini");if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){textBox2.Text = folderBrowserDialog1.SelectedPath;WritePrivateProfileString("SysSet", "RootPath", folderBrowserDialog1.SelectedPath, Application.StartupPath + "\\SysSet.ini");}}//下载地址改变时,相应的下载文件发生改变private void textBox1_TextChanged(object sender, EventArgs e){if (textBox1.Text.Contains("/")){textBox3.Text = textBox1.Text.Substring(textBox1.Text.LastIndexOf("/") + 1);strName = textBox3.Text;}}#region 以断点续传方式下载文件/// <summary>/// 以断点续传方式下载文件/// </summary>/// <param name="strFileName">下载文件的保存路径</param>/// <param name="strUrl">文件下载地址</param>public void DownloadFile(string strFileName, string strUrl){//打开上次下载的文件或新建文件long SPosition = 0;FileStream FStream;if (File.Exists(strFileName)){FStream = File.OpenWrite(strFileName);SPosition = FStream.Length;FStream.Seek(SPosition, SeekOrigin.Current);//移动文件流中的当前指针}else{FStream = new FileStream(strFileName, FileMode.Create);SPosition = 0;}//打开网络连接try{HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl);if (SPosition > 0)myRequest.AddRange((int)SPosition);//设置Range值//向服务器请求,获得服务器的回应数据流Stream myStream = myRequest.GetResponse().GetResponseStream();byte[] btContent = new byte[512];int intSize = 0;intSize = myStream.Read(btContent, 0, 512);while (intSize > 0){FStream.Write(btContent, 0, intSize);intSize = myStream.Read(btContent, 0, 512);}FStream.Close();myStream.Close();MessageBox.Show("文件下载完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch{FStream.Close();}}#endregion#region 为INI文件中指定的节点取得字符串/// <summary>/// 为INI文件中指定的节点取得字符串/// </summary>/// <param name="lpAppName">欲在其中查找关键字的节点名称</param>/// <param name="lpKeyName">欲获取的项名</param>/// <param name="lpDefault">指定的项没有找到时返回的默认值</param>/// <param name="lpReturnedString">指定一个字串缓冲区,长度至少为nSize</param>/// <param name="nSize">指定装载到lpReturnedString缓冲区的最大字符数量</param>/// <param name="lpFileName">INI文件名</param>/// <returns>复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符</returns>[DllImport("kernel32")]public static extern int GetPrivateProfileString(string lpAppName,string lpKeyName,string lpDefault,StringBuilder lpReturnedString,int nSize,string lpFileName);#endregion#region 修改INI文件中内容/// <summary>/// 修改INI文件中内容/// </summary>/// <param name="lpApplicationName">欲在其中写入的节点名称</param>/// <param name="lpKeyName">欲设置的项名</param>/// <param name="lpString">要写入的新字符串</param>/// <param name="lpFileName">INI文件名</param>/// <returns>非零表示成功,零表示失败</returns>[DllImport("kernel32")]public static extern int WritePrivateProfileString(string lpApplicationName,string lpKeyName,string lpString,string lpFileName);#endregion#region 从INI文件中读取指定节点的内容/// <summary>/// 从INI文件中读取指定节点的内容/// </summary>/// <param name="section">INI节点</param>/// <param name="key">节点下的项</param>/// <param name="def">没有找到内容时返回的默认值</param>/// <param name="def">要读取的INI文件</param>/// <returns>读取的节点内容</returns>public static string ReadString(string section, string key, string def, string fileName){StringBuilder temp = new StringBuilder(1024);GetPrivateProfileString(section, key, def, temp, 1024, fileName);return temp.ToString();}#endregionprivate void button3_Click(object sender, EventArgs e){this.Close();}}
}

2.显示效果

c#断点续传下载文件相关推荐

  1. 新技能 get —— Python 断点续传下载文件

    from urllib.request import urlretrieve import sys import osprev_reported_download_percent = None# 首先 ...

  2. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载

    前言:iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载是在前篇iOS开发之网络编程--使用NSURLConnection实现大文件下载的基础上进行    断点续传的设置 ...

  3. Android下载文件(一)下载进度断点续传

    Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...

  4. okhttp3下载文件检测进度与断点续传

    之前有用过retrofit来做下载的功能,虽然retrofit基于okhttp,但是这还是有点不同. 我是在做更新功能的时候用到这个,具体的操作可能不会说太多,因为网上能找到很多基本的操作,我就说下一 ...

  5. java list断点续传_java实现文件断点续传下载功能

    本文实例为大家分享了java断点续传下载的代码,供大家参考,具体内容如下 1. Java代码 //实现文件下载功能 public String downloadFile(){ File dir = n ...

  6. java 多线程下载文件并实时计算下载百分比(断点续传)

    多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...

  7. Golang:实现断点续传(http单线程下载文件)

    package breakpointContinuationimport ("fmt""io""io/ioutil""net/ht ...

  8. golang实现多协程下载文件(支持断点续传)

    golang实现多协程下载文件(支持断点续传) 引言 写这篇文章主要是周末休息太无聊,看了看别人代码,发现基本上要么是多协程下载文件要么就只有单协程的断点续传,所以就试了试有进度条的多协程下载文件(支 ...

  9. java文件断点续传下载或视频播放

    java文件断点续传下载或视频播放 代码 代码 @GetMapping("/download")public void download(Long id, HttpServletR ...

最新文章

  1. java获取apk启动activity_[RK3399] android7.1 设置开机启动apk
  2. bilibili有电脑版吗_你体验过电脑版的《和平精英》吗?不用担心内存,也不用担心卡顿...
  3. 网站后台的lnmp启动与重启
  4. Oracle中的move命令
  5. SAP云平台上Redis dashboard提供的功能一览
  6. 【OpenCV】OpenCV函数精讲之 -- 教你如何使用离散傅里叶变换
  7. 解决安装SQL Server 2000提示文件挂起的一般方法
  8. 因为CSS文件编码问题IE6无法正确解析CSS
  9. [dhtmlxGantt]Milestone Mark-里程碑标识的交错显示
  10. 预测评价系统_「机器学习」一文读懂分类算法常用评价指标
  11. 热门Ruby 库中存在严重的命令注入漏洞
  12. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  13. STM8单片机的多通道连续AD采集
  14. [ delphi ] AES-256-ECB 加密、解密算法控件说明
  15. 写给想做互联网产品经理的师弟师妹们一些话
  16. linux环境hexo和GithubPages搭建个人博客
  17. ipv6地址概述——配置ipv6
  18. 微信运动刷步教程 QQ健康刷步数(一)之安卓版本 - 乐运动
  19. 呆呆带你手撸一个思维导图-基础篇
  20. IOS开发基础 · SwiftUI · StanfordCS193p Lecture1-2

热门文章

  1. 药品计算机数据备份管理制度,GMP丨《药品记录与数据管理要求》(试行)解读
  2. 垃圾分类之上传一张图片进行测试
  3. 输入整数显示ASCII字符(c++)
  4. 小程序获取上一个页面或者某个页面内的值
  5. 寒武纪如何查看mlu的运行状态
  6. 笔记本购机测试软件大全
  7. 数据结构之三元组的实现
  8. yaourt下载速度太慢_加快Yaourt软件包的安装速度
  9. 群晖218J安装mysql_群晖218j和218+选择哪个?
  10. 基于Pygame中Pygame模块的大战外星人