使用C#的Winform实现远程服务器下载  

刚写了一个 使用C#的Winform实现远程服务器上传 .那我们还需要下载啊.现在就研究一个.

image

直接干脆的创建一个公共类,弄个静态方法.需要时调用就行了

public class SysUtils
{
    private SysUtils() { }
    //创建一个记录处理状态的枚举
    public enum DownLoadState { Success,WebError,URLError,OtherError };
    /// <summary>        
    /// 下载文件        
    /// </summary>        
    /// <param name="URL">下载文件地址</param>    
    /// <param name="Filename">下载后的存放地址</param>        
    /// <param name="Prog">用于显示的进度条</param>        
    /// 
    public static DownLoadState downloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog)
    {
        try
        {
            System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
            System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
            long totalBytes = myrp.ContentLength;
            if (prog != null)
            {
                prog.Maximum = (int)totalBytes;
            }
            System.IO.Stream st = myrp.GetResponseStream();
            System.IO.Stream 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;
                System.Windows.Forms.Application.DoEvents();
                so.Write(by, 0, osize);
                if (prog != null)
                {
                    prog.Value = (int)totalDownloadedByte;
                }
                osize = st.Read(by, 0, (int)by.Length);
            }
            so.Close();
            st.Close();
        }
        catch (UriFormatException ex)
        {
            return DownLoadState.URLError;
        }
        catch (WebException ex)
        {
            return DownLoadState.WebError;
        }
        catch (System.Exception)
        {
            return DownLoadState.OtherError;
        }
        return DownLoadState.Success;
    }
}

然后界面拖一个文本框,一个按钮,一个进度条.默认命名就可以了.添加下面的代码把button1的click事件绑定就可以了

   1:  private String path = String.Format(
   2:          "{0}\\downloadDir\\", Application.StartupPath);
   3:  private void button1_Click(object sender, EventArgs e)
   4:  {
   5:      //进行文件下载
   6:      if (!checkDir())
   7:      {
   8:          MessageBox.Show("下载路径不能保存,请检查硬盘是否已满或者有无故障");
   9:          return;
  10:      }
  11:      //可以写的路径
  12:      String url = textBox1.Text;
  13:      String fileName = String.Format("{0}{1}", path,
  14:          Path.GetFileName(url));
  15:      SysUtils.DownLoadState st = SysUtils.downloadFile(url, fileName, progressBar1);
  16:      MessageBox.Show(st.ToString());
  17:  }
  18:  //判断文件夹是否存在
  19:  private bool checkDir()
  20:  {            
  21:      if (!Directory.Exists(path))
  22:      {
  23:          try
  24:          {
  25:              Directory.CreateDirectory(path);
  26:          }
  27:          catch (Exception)
  28:          {
  29:              return false;
  30:          }
  31:      }
  32:      return true;
  33:  }

按照返回的枚举值自己判断吧,打完收工继续干活去

欢迎大佬支持本博客的发展 -- Donate --

本文链接:使用C#的Winform实现远程服务器下载

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  1. 这个主界面会死掉吧 为什么不开个线程

  2. 你这样写的话,传输过程中文件极易损坏

    • 这只是最简单的上传下载方式,没有考虑封包和udp
      不同的应用有不同的实现方式呗

  3. 这个表示看不太懂啊

  4. 哥们,你主要用C#编程么?

    • java C# php css,过去还搞asp和vb
      android不知道算不算

  5. 效果不错啊。。。真厉害。。。

  1. 没有通告