简单文件备份工具(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类的几个方法对接一下工具就完成了

简单文件备份工具(C#)相关推荐

  1. mac下简单绘图工具

    mac下简单绘图工具 由于用的Mac系统的缘故,有时候想绘制一些简单的图形,想找一款像window下的画图工具,一直没有找到 今天无意中想到了一个方法,使用Mac系统自带的"预览" ...

  2. 一、Excel简介、Excel的基本概念及操作、简单小工具

    1. Excel简介 1.1 Excel可以做什么 1.2 Excel界面 2. Excel的基本概念及操作 2.1 XLS/XLSX 工作薄文件 2.2 XLW 工作区文件 2.3 插入 2.4 交 ...

  3. 超级简单的工具——Video Speed Controller,玩转百度云,轻松解锁百度云视频倍速播放功能!

    有经常使用百度云盘看视频需求的小伙伴肯定清楚百度的niao性,如果我们不是人民币玩家,咱就不配享用人家的在线视频倍速播放功能.Emm- 今天给大家分享一个十分简单的工具--Video Speed Co ...

  4. 最简单去水印工具免服务器域名源码搭建,

    现如今在线副业已经成为一种趋势,越来越多的人选择副业作为起步.小程序凭借不占内存.无论前期投入还是后期维护,成本都较低:如果你想副业来赚钱,选择小程序是非常不错的选择,有很多人可能会问,我不会做小程序 ...

  5. 【Excel2019(一):认识Excel】【Excel简介+Excel的基本概念及操作+简单小工具】

    +++++++++++++开始线++++++++++++++++ 文章目录 1. Excel简介 1.1 Excel可以做什么 1.2 Excel界面 2. Excel的基本概念及操作 2.1 XLS ...

  6. JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要根据不同 ...

  7. [Windows]获取md5值最简单的工具

    只需要在命令控制行输入"md5 文件名"就可以获取md5值, 简单易用并且保证md5值是准确的! 文件名可以是全路径,也可以是相对路径. 本人制作的简单工具,比如Windows自带 ...

  8. 最简单测试工具开发教程(有手就行)

    测试脚本,相信任何一个正经测试都会写. 但是作为公司的测试达人,写了py脚本,然后分享出去,让别人去安装python,下载各种依赖,无疑是一件很low的事情. 常用的方式有2种: 1.写web,让别人 ...

  9. uniapp APP 端 WebSocket 使用,实现一个简单 WebSocket 工具类

    背景 最近有需求要做一个简单业务的 APP 应用,简单考虑选用 uniapp + uview + vue2.x 方案,因为还有web端页面也需要用到 WebSocket ,简单封装了一个适应 web ...

最新文章

  1. 如何将一个列表当作元组的一个元素
  2. spring源码分析之spring-core asm概述
  3. java中map可以为空吗_Java: Map里面的键和值可以为空吗?
  4. php服务器无法上传图片,IIS+php服务器无法上传图片解决办法_PHP教程
  5. 20条.net编码习惯 【转】
  6. [ACTF2020 新生赛]Include
  7. 透过现象看本质,透析NAC系统几步走(4)
  8. php和ajax实现聊天功能,怎么在PHP项目中使用jquery与ajax实现一个即时聊天功能
  9. php response.write,ASP_RESPONSE.WRITE和lt;%=%的区别,RESPONSE.WRITE与%=%都是ASP程 - phpStudy...
  10. ECS 还是轻量应用服务器,看完评测你就知道了?
  11. Rayleigh-Ritz法和Galerkin法
  12. IKBC NEW POKER 替换固件使用独立方向键
  13. PHP开发安全之近墨者浅谈(转)
  14. 04.配置unp.h头文件出现开启 xinetd daytime 服务时 /etc/xinetd.d下 没有daytime 文件的解决办法
  15. 百度沈抖:文心一言将通过百度智能云对外提供服务
  16. mac浏览器打不开html,苹果电脑自带浏览器打不开百度
  17. Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army
  18. 科普 | 如何创建一个DAO?
  19. AtCoder Beginner Contest 167 A Registration 字符串比较
  20. 计算机网络专业自考本科难不难,自考本科计算机网络专业科目难吗?

热门文章

  1. Curve对象的GetOffsetCurves的偏移
  2. 别再重复造轮子了,这几个开源 Java 工具库送给你
  3. 九、【TF2】Metrics 评估指标
  4. 【经验】tf1.x迁移到tf2.x教程
  5. 记第一次(失败的)数学建模校赛,脚踏实地
  6. 4g hspa android,最新产品 14.4M 4G无线上网卡WCDMA HSPA+
  7. solaris oracle zfs 调优,为数据库产品进行 ZFS 调优
  8. 30岁,转行学编程来的及吗?
  9. 2012陕西省互联网大会的一些感受
  10. 学生用计算机打出ilove,学霸爱另类:用数字字母化学元素情书来表白