简单文件备份工具(C#)

来源:互联网 发布:dns默认端口 编辑:程序博客网 时间:2024/06/10 01:39

简单文件备份工具(C#)

平时想备份一些文件,但感觉抽出精力去管理太麻烦(懒癌晚期),于是想写一个文件备份工具。
想要这样的效果
这里写图片描述
点选备份之后在设置的备份路径下存盘
点选导出备份后打开备份文件夹
这里写图片描述
IDE用VS2012,先从立工具类开始

namespace BackupTools {    public class BackupTools {        //初始化        static BackupTools() {}        //当前选中的备份路径        private string selectedBackupPath = "";        public string SelectedBackupPath{            get {                return selectedBackupPath;            }            set {                selectedBackupPath = value;            }        }        //备份路径        private string savedBackupPath = "";        public string SavedBackupPath {            get {                return savedBackupPath;            }            set {                savedBackupPath = value;                //按;分割路径字符串                this.savedBackupPathList = ListProcesser.SplitStringToList(value, ";", false);            }        }        //备份路径列表        public List<string> SavedBackupPathList{            get {                return savedBackupPathList;            }            set {                savedBackupPathList = value;                //将字符串列表合成字符串                this.savedBackupPath = ListProcesser.ConvertToString(value);            }        }        public bool SetSelectedBackupPath(string path){}        public bool AddSavedBackupPath(string path){}        public void DeleteSavedBackupPath(string path){}        public void OpenSavedFolder(){}        public void OpenSavedFolder(string filePath){}        public void BackupFile(string filePath){}        public void BackupFolder(string folderPath){}        public static void RegisterToRightMenu(){}        public static void DeregisterToRightMenu(){}    }}

这里有两个问题:1、添加命令到右键菜单;2、保存备份路径。
问题1很简单,修改下注册表就好了

//用了PathTools和RegistryTools两个工具类来处理一些繁琐的操作,这两个类因为和文章主题没关系所以就不放了public static string RegisterBackupFileRightMenuText = "备份";public static string RegisterBackupFolderRightMenuText = "备份";public static string RegisterExportRightMenuText = "导出备份";//注册到右键菜单public static void RegisterToRightMenu() {    //.*文件的右键菜单--------------------------------------------------------    //PathTools.GetCurrentProcessFileFullPath 获取可执行文件完整路径    string regStrBackupFile = String.Format("\"{0}\" \"BackupFile\" \"%1\"", PathTools.GetCurrentProcessFileFullPath());    //RegistryTools.CreateRegistryKey 创建注册表键    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackup");    //RegistryTools.SetRegistryData 设置注册表键值    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\*\shell\zbackup", "", RegisterBackupFileRightMenuText);    //command键值是按下右键菜单执行的命令    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackup\command");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\*\shell\zbackup\command", "", regStrBackupFile);    string regStrExportFile = String.Format("\"{0}\" \"Export\" \"%1\"", PathTools.GetCurrentProcessFileFullPath());    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackupexport");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\*\shell\zbackupexport", "", RegisterExportRightMenuText);    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackupexport\command");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\*\shell\zbackupexport\command", "", regStrExportFile);    //文件夹的右键菜单-----------------------------------    string regStrBackupFolder = String.Format("\"{0}\" \"BackupFile\" \"%1\"", PathTools.GetCurrentProcessFileFullPath());    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackup");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\Folder\shell\zbackup", "", RegisterBackupFileRightMenuText);    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackup\command");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\Folder\shell\zbackup\command", "", regStrBackupFolder);    string regStrExportFolder = String.Format("\"{0}\" \"Export\" \"%1\"", PathTools.GetCurrentProcessFileFullPath());    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackupexport");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\Folder\shell\zbackupexport", "", RegisterExportRightMenuText);    RegistryTools.CreateRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackupexport\command");    RegistryTools.SetRegistryData(@"HKEY_CLASSES_ROOT\Folder\shell\zbackupexport\command", "", regStrExportFolder);}//注销右键菜单public static void DeregisterToRightMenu() {    //RegistryTools.DeleteRegistryKey 从注册表中删除键    RegistryTools.DeleteRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackup");    RegistryTools.DeleteRegistryKey(@"HKEY_CLASSES_ROOT\*\shell\zbackupexport");    RegistryTools.DeleteRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackup");    RegistryTools.DeleteRegistryKey(@"HKEY_CLASSES_ROOT\Folder\shell\zbackupexport");}

问题2为了方便,使用XML Configuration文件解决
把要保存的两个变量添加到Settings
这里写图片描述
再和管理配置的工具对接一下

private static string SavedBackupPathSaveName = "SavedBackupPath";private static string SelectedBackupPathSaveName = "SelectedBackupPath";//ConfigTools这个工具简单说就是封装了对ApplicationSetting的一些操作,也和文章没关系就不放了static BackupTools() {    //初始化时添加了对保存配置和加载配置的监听    ConfigTools.AddLoadConfigHandle<BackupTools>(new ConfigTools.LoadConfigHandle(BackupTools.Load_Config_BackupTools));    ConfigTools.AddSaveConfigHandle<BackupTools>(new ConfigTools.SaveConfigHandle(BackupTools.Save_Config_BackupTools));}private static void Save_Config_BackupTools(object obj, object parent) {    ZBackupAssistant tools = obj as BackupTools;    if (tools == null)        return;    ConfigTools.SetConfig(SavedBackupPathSaveName, tools.SavedBackupPath);    ConfigTools.SetConfig(SelectedBackupPathSaveName, tools.SelectedBackupPath);    ConfigTools.SaveConfig();}private static void Load_Config_BackupTools(object obj, object parent) {    ZBackupAssistant tools = obj as BackupTools;    if (tools == null)        return;    tools.SavedBackupPath = ConfigTools.LoadConfig<string>(SavedBackupPathSaveName);    tools.SelectedBackupPath = ConfigTools.LoadConfig<string>(SelectedBackupPathSaveName);}

问题解决了,接下来实现一下备份文件和导出备份文件的逻辑BackupTools这个类就完成了

private static string SavedBackupFormatString = "yyyy-MM-dd-HHmmss";//打开备份文件夹public void OpenSavedFolder() {    //直接打开目前选中的备份路径    ZFileTools.OpenFolder(this.SelectedBackupPath);}//打开备份文件夹根据备份文件名public void OpenSavedFolder(string filePath) {    string savedFolderName = GetSavedFolderName(filePath);    //遍历备份路径表    foreach (string path in this.SavedBackupPathList) {        //合成文件备份路径        string savedPath = Path.Combine(path, savedFolderName);        if (FileTools.CheckFolder(savedPath) == true) {            //打开文件夹            FileTools.OpenFolder(savedPath);        }    }}//备份文件public void BackupFile(string filePath) {    string savedFolderName = GetSavedFolderName(filePath);    string savedDateTimeString = GetSavedDateTimeString();    string savedPath = Path.Combine(this.SelectedBackupPath, savedFolderName, savedDateTimeString);    //检查备份文件夹是否存在    if (FileTools.CheckFolder(savedPath) != true) {        //不存在就创建文件夹        FileTools.CreateFolder(savedPath);    }    //复制文件    FileTools.CopyFile(filePath, savedPath);}//备份文件夹public void BackupFolder(string folderPath) {    string savedFolderName = GetSavedFolderName(folderPath);    string savedDateTimeString = GetSavedDateTimeString();    string savedPath = Path.Combine(this.SelectedBackupPath, savedFolderName, savedDateTimeString);    if (FileTools.CheckFolder(savedPath) != true) {        FileTools.CreateFolder(savedPath);    }    //复制文件夹    FileTools.CopyFolder(folderPath, savedPath);}//获取备份文件夹名public static string GetSavedFolderName(string filePath) {    return FileTools.GetFolderName(filePath);}//获取备份日期字符串public static string GetSavedDateTimeString() {    //将DateTime对象按结构字符串生成字符串    return DateTimeTools.ConverToString(DateTime.Now, SavedBackupFormatString);}

把工具类包装一下

using BackupTools;using Test_BackupTools.Properties;namespace Test_BackupTools {    class Program {        private static BackupTools BackupTools = new BackupTools();        static void Main(string[] args) {            ConfigTools.Settings = Settings.Default;            ConfigTools.Load(BackupTools);            if (args.Length <= 0) {                BackupToolsForm form = new BackupToolsForm();                form.BackupTools = BackupTools;                Application.Run(form);            } else {                string switchStr = args[0].ToUpper();                List<string> pathList = new List<string>();                if (args.Length >= 2) {                    for (int i=1; i<args.Length; i++) {                        pathList.Add(args[i]);                    }                }                if (switchStr.Equals("BackupFile".ToUpper())) {                    BackupTools.BackupFile(pathList[0]);                } else if (switchStr.Equals("BackupFolder".ToUpper())) {                    BackupTools.BackupFolder(pathList[0]);                } else if (switchStr.Equals("Export".ToUpper())) {                    BackupTools.OpenSavedFolder(pathList[0]);                }            }            ConfigTools.Save(BackupTools);        }    }}

画个简单的窗体,把控件和BackupTools类的几个方法对接一下工具就完成了
这里写图片描述

原创粉丝点击