C# 文件下载类

using System;

using System.Net;

using System.IO;

using System.Text;

using System.Web;

using System.Windows.Forms; 

   

   

namespace test

{

    ///   <summary> 

    ///   httpDownLoad  

    ///   </summary> 

    public class HttpDownLoad

    {

        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, System.Windows.Forms.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 void httpDownFile(string url, string fileName, System.Windows.Forms.ProgressBar progressBar, Label label)

        {

            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() + "%";

                            System.Windows.Forms.Application.DoEvents();

                        }

                        str.Close();

                        fs.Close();

                    }

                }

            }

            catch (Exception ex)

            {

                if (str != null)

                    str.Close();

                if (fs != null)

                    fs.Close();

                MessageBox.Show(ex.Message);

            }

        }

        ///   <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 ex)

            {

                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 ex)

            {

                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 ex)

            {

                MessageBox.Show(ex.Message);

                return false;

            }

        }

        public void downClose()

        {

            stopDown = true;

        }

    }

}

 

=====================================================================
调用
=====================================================================

HttpDownLoad ht = new HttpDownLoad();
ht.httpDownFile("http://img.baidu.com/img/post-jg.gif", "post-jg.gif", this.progressBar1);



你可能感兴趣的:(文件下载)