相信大家做项目或者处理文件时候经常要用到备份的功能,这里给大家做一个可以同步更新文件夹内容并且备份的Winform程序,目前地址路径在App.Config文件里面设置,如需更改直接用记事本编辑即可,下面放代码和截图。
1.CS代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Configuration; using System.Text.RegularExpressions; namespace Update { public partial class AutoUpdate : Form { string filePath = ConfigurationManager.AppSettings["FilePath"].ToString(); string targetPath = ConfigurationManager.AppSettings["TargetPath"].ToString(); string Timing = ConfigurationManager.AppSettings["Timing"].ToString(); string backPath = ConfigurationManager.AppSettings["backUpPath"].ToString(); int count = 0; string fullPath = "D:/backup/backup.txt";//设置日志地址 public AutoUpdate() { InitializeComponent(); this.txtFile.Text = filePath; this.txtTo.Text = targetPath; this.txtTime.Text = Timing; } /// <summary> /// 更新 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdate_Click(object sender, EventArgs e) { //更新同时调用备份 backup(); if (filePath != "") { if (CopyDir(filePath, targetPath)) { MessageBox.Show("更新成功!!!"); } else { MessageBox.Show("更新失败!!!"); } } else { MessageBox.Show("请正确设置源地址!"); } } /// <summary> /// 更新文件处理 /// </summary> /// <param name="srcPath"></param> /// <param name="aimPath"></param> /// <returns></returns> private bool CopyDir(string srcPath, string aimPath) { bool copyFile = false; try { // 检查目标目录是否以目录分割字符结束如果不是则添加 if (aimPath[aimPath.Length - 1] != System.IO.Path.DirectorySeparatorChar) { aimPath += System.IO.Path.DirectorySeparatorChar; } // 判断目标目录是否存在如果不存在则新建 if (!System.IO.Directory.Exists(aimPath)) { System.IO.Directory.CreateDirectory(aimPath); } // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组 // 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法 // string[] fileList = Directory.GetFiles(srcPath); string[] fileList = System.IO.Directory.GetFileSystemEntries(srcPath); string str = ""; if (count == 0) { str = DateTime.Now.ToString() + "------"; } // 遍历所有的文件和目录 foreach (string file in fileList) { // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 if (System.IO.Directory.Exists(file)) { CopyDir(file, aimPath + System.IO.Path.GetFileName(file)); if (count == 0) { str += file + ","; } } // 否则直接Copy文件 else { System.IO.File.Copy(file, aimPath + System.IO.Path.GetFileName(file), true); if (count == 0) { str += file + ","; } } } if (System.IO.File.Exists(fullPath)) { using (StreamWriter sw = new StreamWriter(fullPath, true, Encoding.Default)) { sw.WriteLine(str); } } else { File.Create(fullPath).Close(); using (StreamWriter sw = new StreamWriter(fullPath, true, Encoding.Default)) { sw.WriteLine(str); } } copyFile = true; } catch (Exception e) { //MessageBox.Show(e.ToString()); } return copyFile; } /// <summary> /// 恢复 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRestoration_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; if (dialog.ShowDialog() == DialogResult.OK) { string foldPath = dialog.SelectedPath; //this.txtFile.Text = foldPath; if (CopyDir(foldPath, targetPath)) { MessageBox.Show("恢复成功!"); } else { MessageBox.Show("恢复失败!"); } } } /// <summary> /// 定时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnTimeUpdate_Click(object sender, EventArgs e) { string dt = DateTime.Now.ToString("HH:mm"); string ver = "^((0[0-9]|1[0-9]|2[0-3]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]))$"; timer.Interval = 30000; //判断是否选中 if (!chbUpdate.Checked) { txtTime.Enabled = true; } else { txtTime.Enabled = false; } if (Timing != "" && Regex.IsMatch(Timing, ver)) { if (dt == Timing) { timer.Tick += new EventHandler(timer_Tick); } } else { MessageBox.Show("请正确填写时间!"); this.chbUpdate.Checked = false; this.txtTime.Text = ""; } } private void timer_Tick(object sender, EventArgs e) { backup(); CopyDir(filePath, targetPath); this.Close(); } /// <summary> /// 查看日志 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLog_Click(object sender, EventArgs e) { if (File.Exists(fullPath)) { System.Diagnostics.Process.Start(fullPath); } else { File.Create(fullPath).Close(); System.Diagnostics.Process.Start(fullPath); } } /// <summary> /// Backup /// </summary> public void backup() { count = 1; if (Directory.Exists(backPath)) { DirectoryInfo dirpath = Directory.CreateDirectory(backPath + DateTime.Now.ToString("yyyy-MM-dd")); string backFile = dirpath.FullName.ToString(); CopyDir(targetPath, backFile); } else { Directory.CreateDirectory(backPath); DirectoryInfo dirpath = Directory.CreateDirectory(backPath + DateTime.Now.ToString("yyyy-MM-dd")); string backFile = dirpath.FullName.ToString(); CopyDir(targetPath, backFile); } count = 0; } } }
2.App.config文件代码:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!--源地址--> <add key="FilePath" value="C:\Users\xiaobai\Desktop\新建文件夹"/> <!--目标地址--> <add key="TargetPath" value="D:\test\" /> <!--备份地址--> <add key="backUpPath" value="D:\backup\" /> <!--设置定时时间--> <add key="Timing" value="14:50" /> </appSettings> </configuration>
3.截图: