使用C#的Winform实现远程服务器下载
刚写了一个 使用C#的Winform实现远程服务器上传 .那我们还需要下载啊.现在就研究一个.
直接干脆的创建一个公共类,弄个静态方法.需要时调用就行了
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: }
按照返回的枚举值自己判断吧,打完收工继续干活去
分享到: | |
这个主界面会死掉吧 为什么不开个线程
只是一个演示例子,所以没有复杂化.见谅
你这样写的话,传输过程中文件极易损坏
这只是最简单的上传下载方式,没有考虑封包和udp
不同的应用有不同的实现方式呗
这个表示看不太懂啊
就跟我不懂影楼一样,行业有些差别
哥们,你主要用C#编程么?
java C# php css,过去还搞asp和vb
android不知道算不算
效果不错啊。。。真厉害。。。
呵呵,备课例子而已