更新服务器文件,下载服务器文件,服务器文件下载,Web方式下载文件

代码更新的方法有很多种,在这里,主要讲解两种,并主要通过使用Web方式,来更新代码。模块可直接套用。

1、局域网文件下载:

public class RemoteDownload
     {
         public static void DownLoad(string addressUrl,string localName)
         {
             //下载文件
             System.Net.WebClient myWebClient = new System.Net.WebClient();
              myWebClient.DownloadFile(fivePath, savePath); //路径,均带文件名           
          }
     }

2、通过Web方式下载,模块可直接套用。

注:另外如果将其改进之后,在CS模式的登录之后,可以通过XML 记录 服务器上的所有必要文件最近更新日期,和客户端文件日期对比,从而进行在线更新。

这也是最常用的,这里只对单个文件更新进行下载,了解了基础原理,相信对应用程序的更新也不会陌生的。

string fileName = @"CP.TP.dll";      //主程序,如按钮操作之后,我们更新的文件
            DownloadFile(fileName);     //下载该文件,

Web方式下载模块接口:

//下载文件可以是 dtd文件,也可以是dll等等
        private bool DownloadFile(string fileName)
        {
            string serverIP = @"10.84.*.*";    //填入你的服务器 IP
            string filePath = string.Format("http://{0}/mesupdate/files/{1}", serverIP, fileName);  //

       //下列注释代码,即为了说明,我们可以把 下载 的最新文件,放在我们的 CS客户端的目录下。为了简单演示,故下列部分注释,但保留给需要的同仁 //string dir = Path.GetFullPath(@"..\..\..\"); //解决方案的目录 ////使用AppDomain获取当前应用程序集的执行目录 //string dir = AppDomain.CurrentDomain.BaseDirectory; //string savePath = dir + fileName; //保存的路径 string savePath = @"D:\" + fileName; //保存到本地的路径+文件名 if (File.Exists(savePath)) //先判断是否存在该文件,如果是更新 应用程序,我们就应该去对比 (我们需要的文件)最近更新时间 了。 { return true; } else { //下载到本地 FileStream stream = null; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("http://{0}/mesupdate/files/{1}", serverIP, fileName)); try { using (Stream rs = request.GetResponse().GetResponseStream()) { byte[] buffer = new byte[0x400]; int count = 0; count = rs.Read(buffer, 0, buffer.Length); if ((buffer[0] == 0x21) && (buffer[1] == 0x21)) { return false; } while (count > 0) { if (stream == null) { try { stream = new FileStream(savePath, FileMode.Create); } catch (Exception) { return false; } } stream.Write(buffer, 0, count); count = rs.Read(buffer, 0, buffer.Length); } if (stream != null) { stream.Flush(); stream.Close(); } } return true; } catch { return false; } } }

 

上述代码测试可用,但是有一点需注意,对于0kb的文件,不会更新的,所有如果有必要,对文件内部做点注释,让他不要是0kb大写,小编在这个问题上也曾纠结过很久,就是下不下来。

具体的原因是

Stream rs = request.GetResponse().GetResponseStream() 执行之后,如果是0kb,那么该字节流就null了,可能有些高人有更巧妙的处理方法,就可以解决该0kb问题。

谢谢您的阅读,希望能帮助到你!

 

版权声明:本文为imyao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/imyao/p/5333540.html