C# 带进度条的文件下载


        private long fileLength;
        private long downLength;//已经下载文件大小,外面想用就改成公共属性 
        private static bool stopDown;
        public HttpDownLoad()
        {
            fileLength = 0;
            downLength = 0;
            stopDown = false;
            // 
            //   TODO:   在此处添加构造函数逻辑 
            // 
        }

        ///   <summary> 
        ///   文件下载 
        ///   </summary> 
        ///   <param   name= "url "> 连接 </param> 
        ///   <param   name= "fileName "> 本地保存文件名 </param> 
        ///   <param   name= "progressBar "> 进度条 </param> 
        public void httpDownFile(string url, string fileName, ProgressBar progressBar)
        {
            Label lable = new Label();
            httpDownFile(url, fileName, progressBar, lable);
            lable.Dispose();
        }

        ///   <summary> 
        ///   文件下载 
        ///   </summary> 
        ///   <param   name= "url "> 连接 </param> 
        ///   <param   name= "fileName "> 本地保存文件名 </param> 
        ///   <param   name= "progressBar "> 进度条 </param> 
        ///   <param   name= "label "> 返回已经下载的百分比 </param> 
        public string httpDownFile(string url, string fileName, ProgressBar progressBar, Label label)
        {
            string strState = "No";
            stopDown = false;
            Stream str = null, fs = null;
            try
            {
                //获取下载文件长度 
                fileLength = getDownLength(url);
                downLength = 0;
                if (fileLength > 0)
                {
                    WebClient DownFile = new WebClient();
                    str = DownFile.OpenRead(url);
                    //判断并建立文件 
                    if (createFile(fileName))
                    {
                        byte[] mbyte = new byte[1024];
                        int readL = str.Read(mbyte, 0, 1024);
                        fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
                        //读取流 
                        while (readL != 0)
                        {
                            if (stopDown)
                                break;
                            downLength += readL;//已经下载大小 
                            fs.Write(mbyte, 0, readL);//写文件 
                            readL = str.Read(mbyte, 0, 1024);//读流 
                            progressBar.Value = (int)(downLength * 100 / fileLength);
                            label.Text = progressBar.Value.ToString() + "% ";
                            Application.DoEvents();
                            strState = "OK";
                        }
                        str.Close();
                        fs.Close();
                    }
                }
            }
            catch (Exception)
            {
                if (str != null)
                    str.Close();
                if (fs != null)
                    fs.Close();
            }
            return strState;
        }

        ///   <summary> 
        ///   文件下载 
        ///   </summary> 
        ///   <param   name= "url "> 连接 </param> 
        ///   <param   name= "fileName "> 本地保存文件名 </param> 
        public void httpDownFile(string url, string fileName)
        {
            try
            {
                WebClient DownFile = new WebClient();
                DownFile.DownloadFile(url, fileName);
            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }
        }

        ///   <summary> 
        ///   获取下载文件大小 
        ///   </summary> 
        ///   <param   name= "url "> 连接 </param> 
        ///   <returns> 文件长度 </returns> 
        private long getDownLength(string url)
        {
            try
            {
                WebRequest wrq = WebRequest.Create(url);
                WebResponse wrp = (WebResponse)wrq.GetResponse();
                wrp.Close();
                return wrp.ContentLength;
            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
                return 0;
            }
        }

        ///   <summary> 
        ///   建立文件(文件如已经存在,删除重建) 
        ///   </summary> 
        ///   <param   name= "fileName "> 文件全名(包括保存目录) </param> 
        ///   <returns> </returns> 
        private bool createFile(string fileName)
        {
            try
            {
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
                Stream s = File.Create(fileName);
                s.Close();
                return true;
            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
                return false;
            }
        }

        public void downClose()
        {
            stopDown = true;
        }

 

转载于:https://www.cnblogs.com/xinnian609/archive/2012/06/08/2541403.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值