简单文件备份工具(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类的几个方法对接一下工具就完成了
阅读全文
0 0
- 简单文件备份工具(C#)
- C# 简单文件备份工具v1.1(系统热键响应、简单调用窗体)
- C# 简单文件备份工具(简便打开复制粘贴)(发布版)
- 目录文件备份工具
- 文件备份好工具
- 简易文件备份工具
- 文件增量备份工具
- 文件自动备份工具
- 文件增量备份工具
- 简单的源码备份工具
- 文件同步备份工具Synkron
- 服务器文件自动备份工具
- 控制文件的备份与恢复(RMAN工具)
- C#简单备份/还原代码
- BCP备份工具的简单使用
- 一个简单blog备份工具的实现
- mysql定时数据备份工具(c#)
- 打算写一个实时文件备份工具
- Tomcat中用环境变量灵活定义spring数据库文件路径
- 用SparkR探索电商数据(一)
- 注意在ajax中return false 为什么表单还是会提交呢
- 简单快捷解决caffe源代码在其他工程(MFC、QT、win32)中调用的问题
- 一次磁盘IO对比
- 简单文件备份工具(C#)
- Next Greater Element II
- 观察者模式Observer Pattern
- Bash Shell 的 嵌套的While带来的问题
- Namespaces (C++)
- linux命令便捷手册
- MVP&Retrofit&Rxjava&Gson的简单例子
- Codeforces 844C Sorting by Subsequences【思维】
- C语言之continue与break的异同