当前位置: 首页 > news >正文

C# 下载文件2

从服务下载压缩包 过程

发起请求 HttpWebRequest

断点续传 HttpWebRequest.AddRange()

获取服务资源的响应 HttpWebResponse

设置下载进度条 

解压压缩包 ZipFile

using System;
using System.IO;
using System.IO.Compression;
using System.Net;namespace Test01
{class Program{static void Main(string[] args){FileStream localFileStream = null;Stream responseStream = null;string url = "http://DotNet.test/Dome.zip";//下载到本地文件的路径string localpath = System.AppDomain.CurrentDomain.BaseDirectory + "Demo.zip";try{//想服务发出请求。HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);webRequest.Timeout = 10000;#region 断点续传//断点续传:如果文件存在,就获取文件的大小 N 单位(字节)long localFileLength = 0;//检查本地文件信息FileInfo info = new FileInfo(localpath);if (info.Exists){localFileLength = info.Length;webRequest.AddRange(localFileLength);localFileStream = info.Open(FileMode.Append, FileAccess.Write);}else{localFileStream = info.Create();}#endregion//获取服务器资源的响应HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();//获取请求返回的内容长度(压缩包的总体积)long totalBytes = webResponse.ContentLength;//获取响应流webResponse.GetResponseStream();byte[] by = new byte[1024];//获取字节数量int osize = responseStream.Read(by, 0, by.Length);//已下载数量 long tocalDownloadedByte = 0;//下载进度double percent = 0;while (osize > 0){先检查是否有按键请求,如果有,判断是否为回车键,如果是则退出循环                //if (Console.KeyAvailable && System.Console.ReadKey(true).Key == ConsoleKey.Enter)//{//isBreak = true;//break;//}tocalDownloadedByte += osize;//项文件写入localFileStream.Write(by, 0, osize);percent = tocalDownloadedByte / (float)totalBytes * 100;osize = responseStream.Read(by, 0, by.Length);Console.SetCursorPosition(0, 0);Console.WriteLine($"下载进度:{ (percent).ToString("F2") }% ");}localFileStream.Close();responseStream.Close();Console.SetCursorPosition(0, 1);Console.WriteLine("下载完成!");#region 解压文件string targetfolderName = localpath.Replace("Demo.zip", string.Empty);ZipFile.ExtractToDirectory(localpath, targetfolderName);//解压#endregion}catch (Exception ex){Console.WriteLine($"错误:{ ex.Message }");}finally{if (localFileStream != null){localFileStream.Close();}if (responseStream != null){responseStream.Close();}}Console.ReadKey();}}
}

相关文章:

  • 【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?
  • FastAdmin后台开发框架 lang 任意文件读取漏洞复现
  • 如何衡量llm 数据集的多样性
  • Eigne库安装及使用教程
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列
  • 证明 几何分布 的期望和方差
  • 实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化
  • 了解 XML HttpRequest 及其在 Web 开发中的应用
  • 什么是模型轻量化?如何自动进行模型轻量化?
  • Linux命令的语法和帮助系统
  • 海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流
  • AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
  • 【Android】安Android Studio环境搭建注意点
  • QT
  • 练习时长 1 年 2 个月的 Java 菜鸡练习生最近面经,期望25K
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Linux系统编程】快速查找errno错误码信息
  • 2019.2.20 c++ 知识梳理
  • Hexo+码云+git快速搭建免费的静态Blog
  • laravel with 查询列表限制条数
  • Linux链接文件
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • oldjun 检测网站的经验
  • Redux系列x:源码分析
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 笨办法学C 练习34:动态数组
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 欢迎参加第二届中国游戏开发者大会
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端自动化解决方案
  • 入手阿里云新服务器的部署NODE
  • 使用agvtool更改app version/build
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​VRRP 虚拟路由冗余协议(华为)
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1)(1.13) SiK无线电高级配置(五)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (a /b)*c的值
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (js)循环条件满足时终止循环
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二)hibernate配置管理
  • (二)WCF的Binding模型
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • ***原理与防范
  • .a文件和.so文件
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core docker部署教程和细节问题
  • .NET Core 发展历程和版本迭代