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();
        }
    }
}

相关推荐

  1. C# 下载文件2

    2024-06-17 02:00:02       39 阅读
  2. qt 5.15.2 网络文件下载功能

    2024-06-17 02:00:02       58 阅读
  3. C#使用ftp进行文件上传和下载功能

    2024-06-17 02:00:02       36 阅读
  4. 使用C++和libcurl下载指定的文件

    2024-06-17 02:00:02       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 02:00:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 02:00:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 02:00:02       87 阅读
  4. Python语言-面向对象

    2024-06-17 02:00:02       96 阅读

热门阅读

  1. React 使用 Zustand 详细教程

    2024-06-17 02:00:02       31 阅读
  2. 速盾:cdn影响seo吗?

    2024-06-17 02:00:02       25 阅读
  3. 后端防接口被刷

    2024-06-17 02:00:02       34 阅读
  4. 敏捷=996/007?现实是……

    2024-06-17 02:00:02       27 阅读
  5. Python3 笔记:字符串的 encode() 和 bytes.decode()

    2024-06-17 02:00:02       31 阅读
  6. 等保测评的概念和流程

    2024-06-17 02:00:02       31 阅读
  7. 论文学习记录

    2024-06-17 02:00:02       33 阅读
  8. 速盾:cdn加速怎么计费?

    2024-06-17 02:00:02       31 阅读