C#实现服务器间文件同步

using System.IO;


        /// <summary>
        /// 远程登陆服务器
        /// </summary>
        /// <param name="remoteHost">远程服务器IP路径</param>
        /// <param name="userName"></param>
        /// <param name="passWord"></param>
        /// <returns>是否登陆成功</returns>
        public static bool ConnectServer(string remoteHost, string userName, string passWord)
        {
            bool Flag = false;
            Process proc = new Process();
            try
            {
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                proc.Start();
                string dosLine = "net use " + remoteHost + " " + passWord + " /user:" + userName;
                proc.StandardInput.WriteLine(dosLine);
                proc.StandardInput.WriteLine("exit");
                while (!proc.HasExited)
                {
                    proc.WaitForExit(1000);
                }
                proc.StandardError.Close();

                Flag = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                proc.Close();
                proc.Dispose();
            }

            return Flag;
        }
        //Connect(@"\\192.168.15.90", "administrator", "123")//连接服务器



        /// <summary>
        /// 递归-拷贝文件夹及文件
        /// </summary>
        /// <param name="sourceDirectoryUrl">源路径</param>
        /// <param name="copyDirectoryUrl">复制路径</param>
        private void CopyDirectory(string sourceDirectoryUrl, string copyDirectoryUrl)
        {
            try
            {
                string folderName = sourceDirectoryUrl.Substring(sourceDirectoryUrl.LastIndexOf("\\") + 1);

                string desfolderdir = copyDirectoryUrl + "\\" + folderName;

                if (copyDirectoryUrl.LastIndexOf("\\") == (copyDirectoryUrl.Length - 1))
                {
                    desfolderdir = copyDirectoryUrl + folderName;
                }

                string[] filenames = Directory.GetFileSystemEntries(sourceDirectoryUrl);

                foreach (string file in filenames)// 遍历所有的文件和目录
                {
                    if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
                    {

                        string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1);
                        if (!Directory.Exists(currentdir))
                        {
                            Directory.CreateDirectory(currentdir);
                        }

                        CopyDirectory(file, desfolderdir);
                    }
                    else // 否则直接copy文件
                    {
                        string srcfileName = file.Substring(file.LastIndexOf("\\") + 1);

                        srcfileName = desfolderdir + "\\" + srcfileName;

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

                        File.Copy(file, srcfileName, true);

                    }
                }//foreach 

                MessageBox.Show("文件同步成功!");

            }
            catch(Exception ex)
            {
                MessageBox.Show("文件同步失败! 错误提示:"+ex.Message);
            }
            finally
            {
                this.Dispose();
                this.Close();
            }

           

        }

        //文件同步按钮
        private void synchronization_Btn_Click(object sender, EventArgs e)
        {
            //连接远程服务器
            if (ConnectServer(@"\\192.168.0.150\文件同步测试区", "lgq0821", "123456"))
            {
                //同步文件
                CopyDirectory(@"F:\文件同步测试区\A服务器\工具包", @"\\192.168.0.150\文件同步测试区");
            }
            else
            {
                MessageBox.Show("身份验证失败!");
            }

        }

 

posted @ 2015-07-09 11:26  罪後忆支湮  阅读(1001)  评论(0编辑  收藏  举报