- <span style="font-size:14px;"> </span><pre name="code" class="csharp"><span style="font-size:14px;"> /// <summary>
- /// 下载带进度条代码(普通进度条)
- /// </summary>
- /// <param name="URL">网址</param>
- /// <param name="Filename">下载后文件名为</param>
- /// <param name="Prog">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
- /// <returns>True/False是否下载成功</returns>
- public static bool DownLoadFile(string URL, string Filename, Action<int, int> 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;
- }</span>
调用方式一:
- <span style="font-size:14px;"> if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", new Action<int, int>(
- (int Maximum, int Value)
- =>
- {
- //更新进度条
- progressBar1.Maximum = Maximum;
- progressBar1.Value = Value;
- })
- ))
- {
- //下载文件后的处理
-
-
- }</span>
不传参数的action写法:
- ((Form)form).BeginInvoke(new Action(() =>
- {
- //处理
- })
调用方式二:
- <span style="font-size:14px;"> </span><pre name="code" class="csharp"><span style="font-size:14px;"> if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", UpdateProgressBar))
- {
- //下载文件后的处理
-
- }
- 更新进度条
- private void UpdateProgressBar(int Maximum, int Value)
- {
- progressBar1.Maximum = Maximum;
- progressBar1.Value = Value;
- }</span>
小注:调用代码中的progressBar1是微软的进度条控件
URL示例:http://111.111.111.211/TestService/download/V1.00/1.00_0012.zip
如果要充Windows Server上下载文件的话,需要在iis中配置,该目录为可以访问的,具体配置步骤如下:
1、找到需要下载文件对应的目录:
2、在右侧找到《目录浏览》:
3、在《目录浏览》上右键,点击:打开该功能
4、可以看到下图,启用即可: