C# C/S架构软件的自动更新功能(http方式) 代码2

        private void ReadXML(out string re,string path,string nodename)
        {
            re = "";              

            if (File.Exists(path))
            {
                string element = string.Empty;
                //string[] returnstr;
                XmlDocument xml = new XmlDocument();
                xml.Load(path);
                XmlNodeReader read = new XmlNodeReader(xml);
                while (read.Read())
                {
                    switch (read.NodeType)
                    {
                                                  element = read.Name;

                            break;
                                                  if (element.Equals(nodename))
                            {
                                re = read.Value;
                            }
                            //if (element.Equals("service"))
                            //{
                            //    re = read.Value;
                            //}
                            //if (element.Equals("Message"))
                            //{
                            //    Message = read.Value;
                            //}

                            break;
                    }
                }
            }
           
        }//读配置文件,获取对应于nodename的信息

        private void UpdateXmlVersion(string path)
        {
            if (File.Exists(path))
            {
                string element = string.Empty;
                XmlDocument xml = new XmlDocument();
                xml.Load(path);
               
                XmlNodeList nodeList=xml.SelectSingleNode("update").ChildNodes;//获取节点的所有子节点
              
                foreach(XmlNode xn in nodeList)//遍历所有子节点
                {
                    XmlElement xe = (XmlElement)xn;

                    XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
                    foreach (XmlNode xn1 in nls)//遍历
                    {
                        XmlElement xe2 = (XmlElement)xn1;//转换类型
                       
                        if (xe2.Name == "version")//如果找到
                        {
                            xe2.InnerText = serviceversion;//则修改
                            break;//找到退出来就可以了                           
                        }
                    }                 
               
                }
                xml.Save(path);//保存。

            }
        }//更新版本号

        private void checkxml(string nodepath)
        {
            if (File.Exists("updateserverconfig.xml"))
            {               
                XmlDocument xml = new XmlDocument();
                xml.Load("updateserverconfig.xml");

                XmlNodeList nodeList = xml.SelectSingleNode(nodepath).ChildNodes;//获取某节点的所有子节点
                foreach (XmlNode xn in nodeList)
                {                  
                    //XmlElement xe = (XmlElement)xn;

                    if (!xn.HasChildNodes)
                    {
                        //对该节点操作
                        string file;
                        file = "/" + xn.Value.Substring(0,xn.Value.LastIndexOf("#"));
                       
                        string tempurlpath;
                        tempurlpath = url + serverpath + file;
                                               
                        string templocalpath;
                        //templocalpath = Application.StartupPath + serverpath + file;
                        templocalpath = @"c:\temp" + serverpath + file;
                        templocalpath = templocalpath.Replace("/", @"\");

                        int n = templocalpath.LastIndexOf(@"\");
                        string filepath = templocalpath.Substring(0, n);

                        if (!Directory.Exists(filepath))
                        {
                            Directory.CreateDirectory(filepath);
                        }                       

                        WebClient wc = new WebClient();
                        wc.DownloadFile(tempurlpath, templocalpath);
                        //wc.DownloadFile(tempurlpath, file);

                        strr = tempurlpath;
                        MyInvoke1 mi1 = new MyInvoke1(loadfileshow);
                        this.BeginInvoke(mi);
                        this.Invoke(mi1(tempurlpath));
                        mi1(tempurlpath);
                        this.Invoke(mi1);//下載文件

                        MyInvoke2 mi2 = new MyInvoke2(DownFile);
                        this.Invoke(mi2, url + serverpath, file);
                       

                        //MyInvoke mi = new MyInvoke(loadFiles);
                        //this.BeginInvoke(mi);
                        //this.Invoke(mi);
                        this.Invoke(new MyInvoke(loadFiles));//下載進度條
                       
                    }
                    else
                    {
                        //先对该节点操作
                        nodepath = nodepath + "/" + xn.Name;
                        serverpath = path;

                        string tempnodepath = nodepath;

                        path =path + "/" + xn.Name;
                        string temppath;
                        temppath = path;
                      
                        this.checkxml(nodepath);

                        //path = temppath;//文件夹里有文件夹,往回返的时候用到的
                        //path = "";
                        path = temppath.Substring(0, temppath.LastIndexOf("/"));
                        //nodepath = "update/updatelist";
                        nodepath = tempnodepath.Substring(0, tempnodepath.LastIndexOf("/"));
                    }

                    //nodepath = "update/updatelist";
                }
           
            }
        }//下载更新文件

        private void copy(string nodepath)
        {
            if (File.Exists("updateserverconfig.xml"))
            {
                XmlDocument xml = new XmlDocument();
                xml.Load("updateserverconfig.xml");

                XmlNodeList nodeList = xml.SelectSingleNode(nodepath).ChildNodes;//获取某节点的所有子节点
                foreach (XmlNode xn in nodeList)
                {
                    //XmlElement xe = (XmlElement)xn;

                    if (!xn.HasChildNodes)
                    {
                        //对该节点操作
                        string fromfile;
                        fromfile =@"\" + xn.Value.Substring(0, xn.Value.LastIndexOf("#"));
                        string tofile;
                        tofile = @"\" + xn.Value.Substring(xn.Value.LastIndexOf("#") + 1, xn.Value.Length - xn.Value.LastIndexOf("#") - 1);

                        //string tempurlpath;
                        //tempurlpath = url + serverpath + file;

                        //string templocalpath;
                        //templocalpath = Application.StartupPath + serverpath + file;
                        //templocalpath = templocalpath.Replace("/", @"\");

                        //int n = templocalpath.LastIndexOf(@"\");
                        //string filepath = templocalpath.Substring(0, n);

                        string frompath = @"c:\temp" +serverpath + fromfile;
                        string topath = Application.StartupPath + serverpath;


                        if (!Directory.Exists(topath))
                        {
                            Directory.CreateDirectory(topath);
                        }

                        topath = topath + tofile;
                        frompath = frompath.Replace("/", @"\");
                        topath = topath.Replace("/", @"\");

                        File.Copy(frompath, topath,true);
                        File.Delete(frompath );

                        //WebClient wc = new WebClient();
                        //wc.DownloadFile(tempurlpath, templocalpath);

                    }
                    else
                    {
                        //先对该节点操作
                        nodepath = nodepath + "/" + xn.Name;
                        serverpath = path;

                        string tempnodepath = nodepath;

                        path = path + "/" + xn.Name;
                        string temppath;
                        temppath = path;

                        this.copy(nodepath);

                        //path = temppath;//文件夹里有文件夹,往回返的时候用到的
                        //path = "";
                        path = temppath.Substring(0, temppath.LastIndexOf("/"));
                        //nodepath = "update/updatelist";
                        nodepath = tempnodepath.Substring(0, tempnodepath.LastIndexOf("/"));

                    }


                }
            }
        }//把跟新文件copy到当前目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值