• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
皇图霸业谈笑间
更高、更快、更强
博客园    首页    新随笔    联系   管理    订阅  订阅
C#WINFOM保存网络文件
C# 网络文件下载类 (url,filename,progressBar)
2009-04-23 17:08
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);
posted on 2011-03-06 19:23  布颜书  阅读(1995)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3