您当前的位置: 首页 >  c#

衣舞晨风

暂无认证

  • 0浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# 下载带进度条代码(普通进度条)

衣舞晨风 发布时间:2015-05-11 12:23:17 ,浏览量:0

     
        ///   
        /// 下载带进度条代码(普通进度条)  
        ///   
        /// 网址  
        /// 下载后文件名为  
        /// 报告进度的处理(第一个参数:总大小,第二个参数:当前进度)  
        /// True/False是否下载成功  
        public static bool DownLoadFile(string URL, string Filename, Action updateProgress = null)
        {
            Stream st = null;
            Stream so = null;
             System.Net.HttpWebRequest Myrq =null;
             System.Net.HttpWebResponse myrp = null;
            bool flag = false;
            try
            {
                Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求     
                myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应     
                long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数
                //更新进度
                if (updateProgress != null)
                {
                    updateProgress((int)totalBytes,0);//从总字节数得到进度条的最大值  
                }
                st = myrp.GetResponseStream(); //从WEB请求创建流(读)     
                so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)     
                long totalDownloadedByte = 0; //下载文件大小     
                byte[] by = new byte[1024];
                int osize = st.Read(by, 0, (int)by.Length); //读流     
                while (osize > 0)
                {
                    totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小     
                    Application.DoEvents();
                    so.Write(by, 0, osize); //写流     
                    //更新进度
                    if (updateProgress != null)
                    {
                        updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条 
                    }
                    osize = st.Read(by, 0, (int)by.Length); //读流     
                }
                //更新进度
                if (updateProgress != null)
                {
                    updateProgress((int)totalBytes, (int)totalBytes);
                }
                flag= true;
            }
            catch(Exception )
            {
                flag = false;
                throw;
                //return false;
            }
            finally
            {
                if (Myrq != null)
                {
                    Myrq.Abort();//销毁关闭连接
                }
                if (myrp != null)
                {
                    myrp.Close();//销毁关闭响应
                }
                if (so != null)
                {
                    so.Close(); //关闭流 
                }
                if (st != null)
                {
                    st.Close(); //关闭流  
                }
            }
            return flag;
        }

调用方式一:

 if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", new Action(
        (int Maximum, int Value)
        =>
        {
            //更新进度条
            progressBar1.Maximum = Maximum;
            progressBar1.Value = Value;
        })
))
{
	//下载文件后的处理
	
	
}

不传参数的action写法:

((Form)form).BeginInvoke(new Action(() =>
            {
                //处理
            })

调用方式二:

 
 if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", UpdateProgressBar))
 {
	//下载文件后的处理
	
}
更新进度条
private void UpdateProgressBar(int Maximum, int Value)
{
     progressBar1.Maximum = Maximum;
     progressBar1.Value = Value;
}


小注:调用代码中的progressBar1是微软的进度条控件

URL示例:http://111.111.111.211/TestService/download/V1.00/1.00_0012.zip

如果要充Windows Server上下载文件的话,需要在iis中配置,该目录为可以访问的,具体配置步骤如下:

1、找到需要下载文件对应的目录:

2、在右侧找到《目录浏览》:

3、在《目录浏览》上右键,点击:打开该功能

4、可以看到下图,启用即可:

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.0414s