⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadfileinfo.cs

📁 断点续传,下载DEMO 是VS2008下写的,我收集的在这里共享给大家
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;

namespace Cblang.HttpDownload
{
    /// <summary>
    /// Download file info
    /// </summary>
    [Serializable()]
    public class DownloadFileInfo
    {
        /// <summary>
        /// 下载中的文件的扩展名
        /// </summary>
        public const string FilenameExt = ".bf!";

        /// <summary>
        /// RequestURL地址
        /// </summary>
        public string RequestURL
        {
            get;
            protected set;
        }
        /// <summary>
        /// 文件名
        /// </summary>
        public string FileName
        {
            get;
            protected set;
        }
        /// <summary>
        /// 文件大小
        /// </summary>
        public int TotalSize
        {
            get;
            set;
        }
        /// <summary>
        /// 已下载的大小
        /// </summary>
        public int BlockLeftSize
        {
            get;
            set;
        }
        /// <summary>
        /// 下载线程数
        /// </summary>
        public int ThreadNumber
        {
            get;
            set;
        }
        /// <summary>
        /// 包大小
        /// </summary>
        public Packet[] Packets
        {
            get;
            set;
        }

        #region 构造函数
        /// <summary>
        /// 用于断点续传
        /// </summary>
        /// <param name="requestURL"></param>
        /// <param name="fileName"></param>
        /// <param name="totalSize"></param>
        /// <param name="threadNumber"></param>
        public DownloadFileInfo(string requestURL, string fileName, int totalSize, int threadNumber)
            : this(requestURL, fileName)
        {
            InitPackets(totalSize, threadNumber);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <param name="fileName"></param>
        public DownloadFileInfo(string url, string fileName)
        {
            RequestURL = url;
            FileName = fileName;
            BlockLeftSize = -1;
        }
        #endregion
        /// <summary>
        /// 
        /// </summary>
        /// <param name="totalSize">总大小</param>
        /// <param name="threadNumber">线程数</param>
        public void InitPackets(int totalSize, int threadNumber)
        {
            if (threadNumber <= 0)
            {
                threadNumber = 5;
            }
            if (totalSize <= Packet.BUFFER_SIZE) //小于64K,单线程下载
            {
                threadNumber = 1;
            }
            TotalSize = totalSize;
            ThreadNumber = threadNumber;
            int packetSize = totalSize / ThreadNumber;

            Packets = new Packet[ThreadNumber];
            for (int i = 0; i < ThreadNumber; i++)
            {
                Packets[i] = new Packet(i * packetSize, (i + 1) * packetSize - 1);
            }
            //最后一包读到未尾...
            Packets[ThreadNumber - 1].To = TotalSize - 1;
            BlockLeftSize = 0;
        }
    }

    /// <summary>
    /// 线程下载的包信息
    /// </summary>
    [Serializable()]
    public class Packet
    {
        /// <summary>
        /// 缓存大小
        /// </summary>
        public const int BUFFER_SIZE = 0x10000;//64k buffer size

        [NonSerialized]
        private byte[] buffer;
        /// <summary>
        /// 缓存
        /// </summary>
        public byte[] Buffer
        {
            get
            {
                if (buffer == null)
                {
                    buffer = new byte[BUFFER_SIZE];
                }
                return buffer;
            }
        }
        /// <summary>
        /// 开始发送数据的位置
        /// </summary>
        public int From
        {
            get;
            set;
        }
        /// <summary>
        /// 停止发送数据的位置
        /// </summary>
        public int To
        {
            get;
            set;
        }
        /// <summary>
        /// 已下载的数据
        /// </summary>
        public int LoadSize
        {
            get;
            set;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="from">开始位置</param>
        /// <param name="to">结束位置</param>
        public Packet(int from, int to)
        {
            From = from;
            To = to;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -