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