我的问题是这样的:比如说,正在更新的时候突然就断网了,但是东西已经更新了,版本号也被修改了,下次他就不会更新了。怎么解决这个问题啊WinForm

解决方案 »

  1.   

    我是菜鸟不懂那个啊,winform的代码怎么弄成事务啊
      

  2.   


      private void Copy(string sourceDirName, string destDirName)
            {
                try
                {
                    if (sourceDirName.Substring(sourceDirName.Length - 1) != "\\")
                    {
                        sourceDirName = sourceDirName + "\\";
                    }
                    if (destDirName.Substring(destDirName.Length - 1) != "\\")
                    {
                        destDirName = destDirName + "\\";
                    }
                    if (Directory.Exists(sourceDirName))
                    {
                        if (!Directory.Exists(destDirName))
                        {
                            Directory.CreateDirectory(destDirName);
                        }
                        foreach (string item in Directory.GetFiles(sourceDirName))
                        {
                            i++;
                            File.Copy(item, destDirName + Path.GetFileName(item), true);
                            FileCopyWork.ReportProgress(i * 100 / count);
                            lbl_Docu.Text = item.Substring(item.LastIndexOf('\\') + 1);
                            lbl_Per.Text = (i * 100 / count + "%");
                            Thread.Sleep(100);
                        }
                        foreach (string item in Directory.GetDirectories(sourceDirName))
                        {
                            Copy(item, destDirName + item.Substring(item.LastIndexOf("\\") + 1));
                        }
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
    这个是哪个复制文件的代码,怎么弄啊
      

  3.   

    或者换个更方便的方法,把版本文件放在最后复制。  private void Copy(string sourceDirName, string destDirName)
            {
                try
                {
                    if (sourceDirName.Substring(sourceDirName.Length - 1) != "\\")
                    {
                        sourceDirName = sourceDirName + "\\";
                    }
                    if (destDirName.Substring(destDirName.Length - 1) != "\\")
                    {
                        destDirName = destDirName + "\\";
                    }
                    if (Directory.Exists(sourceDirName))
                    {
                        if (!Directory.Exists(destDirName))
                        {
                            Directory.CreateDirectory(destDirName);
                        }
                        string version = "";//改成版本文件名
                        foreach (string item in Directory.GetFiles(sourceDirName))
                        {
                            i++;
                            // 增加判断
                            if (item != version)
                            File.Copy(item, destDirName + Path.GetFileName(item), true);
                            FileCopyWork.ReportProgress(i * 100 / count);
                            lbl_Docu.Text = item.Substring(item.LastIndexOf('\\') + 1);
                            lbl_Per.Text = (i * 100 / count + "%");
                            Thread.Sleep(100);
                        }
                        foreach (string item in Directory.GetDirectories(sourceDirName))
                        {
                            Copy(item, destDirName + item.Substring(item.LastIndexOf("\\") + 1));
                        }
                        //最后复制
                        File.Copy(version, destDirName + Path.GetFileName(version), true);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
      

  4.   

    谢谢哥哥啊,这个Copy的方法可行吗?那个version的值还是空的,没有给他赋值啊。帮帮忙解答下
      

  5.   


    你自己改啊,具体哪个版本文件只有你自己知道不是吗……
    这个代码是我们组长给我的,他就说让我解决这个问题。string version="",怎么给他赋值啊,就是最后更想他的版本号
      

  6.   

    这个是那个config.xml配置文件
    <?xml version="1.0" encoding="gb2312"?>
    <Root>
        <!-- 数据库 相关设置-->
      <DataBase DataSource="localhost" InitialCatalog="" UserID="" Password="" />
      <Server URL="localhost" />
      <User userid="admin" ischecked="true" />
      <Skin commonskin="Eighteen.ssk" logonskin="Eighteen.ssk" />
      <User userid="admin" ischecked="true" />
      <App Version="2.5.4" />
      <UpdateDocu DocuName="CDMSUpdate" />
    </Root>
    我真的不会啊
      

  7.   


    config.xml不就是你的记录版本的文件吗,把这个最后复制就可以了。
    string version = @"config.xml";//可能文件名之前还要加上路径,这个你自己判断。
      

  8.   

    谢谢啦,把那个string version="XXXXX"弄好就可以了吗
      

  9.   

      private void Copy(string sourceDirName, string destDirName)
            {
                try
                {
                    if (sourceDirName.Substring(sourceDirName.Length - 1) != "\\")
                    {
                        sourceDirName = sourceDirName + "\\";
                    }
                    if (destDirName.Substring(destDirName.Length - 1) != "\\")
                    {
                        destDirName = destDirName + "\\";
                    }
                    if (Directory.Exists(sourceDirName))
                    {
                        if (!Directory.Exists(destDirName))
                        {
                            Directory.CreateDirectory(destDirName);
                        }
                        string version = Application.StartupPath+ "config.xml";//改成版本文件名
                        foreach (string item in Directory.GetFiles(sourceDirName))
                        {
                            i++;
                            // 增加判断
                            if (item != version)
                                File.Copy(item, destDirName + Path.GetFileName(item), true);
                            FileCopyWork.ReportProgress(i * 100 / count);
                            lbl_Docu.Text = item.Substring(item.LastIndexOf('\\') + 1);
                            lbl_Per.Text = (i * 100 / count + "%");
                            Thread.Sleep(100);
                        }
                        foreach (string item in Directory.GetDirectories(sourceDirName))
                        {
                            Copy(item, destDirName + item.Substring(item.LastIndexOf("\\") + 1));
                        }
                        //最后复制
                        File.Copy(version, destDirName + Path.GetFileName(version), true);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    我试过了,如果我把窗体关闭假造断网的情况他的config.xml文件已经更新了,你这个方法不行啊
      

  10.   

    关闭后跑到异常处理的地方吗,就是这一句:
    MessageBox.Show(e.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);没有的话,说明没有异常,当然会正常复制的。
      

  11.   

      /// <summary>
            /// 文件夹复制
            /// </summary>
            /// <param name="sourceDirName">原始路径</param>
            /// <param name="destDirName">目标路径</param>
            /// <returns></returns>        private void Copy(string sourceDirName, string destDirName)
            {
                try
                {
                    if (sourceDirName.Substring(sourceDirName.Length - 1) != "\\")
                    {
                        sourceDirName = sourceDirName + "\\";
                    }
                    if (destDirName.Substring(destDirName.Length - 1) != "\\")
                    {
                        destDirName = destDirName + "\\";
                    }
                    if (Directory.Exists(sourceDirName))
                    {
                        if (!Directory.Exists(destDirName))
                        {
                            Directory.CreateDirectory(destDirName);
                        }
                        string version = Application.StartupPath + "\\config.xml";
                        foreach (string item in Directory.GetFiles(sourceDirName))
                        {
                            i++;
                            // 增加判断
                            if (item != version)
                                File.Copy(item, destDirName + Path.GetFileName(item), true);
                            FileCopyWork.ReportProgress(i * 100 / count);
                            lbl_Docu.Text = item.Substring(item.LastIndexOf('\\') + 1);
                            lbl_Per.Text = (i * 100 / count + "%");
                            Thread.Sleep(100);
                        }
                        foreach (string item in Directory.GetDirectories(sourceDirName))
                        {
                            Copy(item, destDirName + item.Substring(item.LastIndexOf("\\") + 1));
                        }
                        //最后复制
                        File.Copy(version, destDirName + Path.GetFileName(version), true);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    这个判断  if (item != version),我调试过了,这2个路径根本不可能一样,所以这个判断没用,item是源目标,version是目标