zoukankan      html  css  js  c++  java
  • 服务器下载文件到本地,更新服务器文件

    代码更新的方法有很多种,在这里,主要讲解两种,并主要通过使用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问题。

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

  • 相关阅读:
    EOF输入
    2019春总结作业
    2019春第二次课程设计报告
    2019春第一次课程设计实验报告
    2019第一次作业的项目模块结构介绍
    2019春第十二周作业
    2019春第十一周作业
    2019春第十周作业
    2019春第九周作业
    2019春第八周作业
  • 原文地址:https://www.cnblogs.com/imyao/p/5333540.html
Copyright © 2011-2022 走看看