岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks
这个工具源自于我的一个需求,
我将文档都保存在了硬盘上,只不过由于分布不够大而只能分开放置于多个文件夹中。
有时候我需要将这些数据进行备份,一张盘也放不下,也就需要备份到多张盘中。

此时问题出现了,如果我往硬盘上新添了一些文档,在我下一次备份的时,我如何准确的筛选出新增的文档。

一般来讲如果只是一个源盘和一个目标盘,用Beyond Compare或者类似的工具就能解决问题。
不过现在是多对多的,问题就变得比较复杂。

因此我就做了这么个东西,可以将多个目录组成虚拟的文件树再进行比较。
文件夹的对应关系直接利用同级文件夹的名称来判断
我也提供了手工设置文件夹对应关系的功能,不过因为UI方面还没考虑好所以没有加上。

文件之间的比较利用两种方案,一种方案在文件被计算过MD5效验的时候直接使用MD5比较
如果没有MD5的话使用文件大小和最后修改时间比较
由于文件比较不使用文件名,也就获得不了对应关系,因此目录树下面的所有文件的所有组合都要一一遍历。
同时由于计算MD5效验码需要读取整个文件,时间较长,因此Checksum是需要手动计算和刷新的。

最后就是树可以整棵的被保存到快照文件中,格式是XML的格式,人也可以读。
比较过后,可以某个子树或者单棵整树的相同文件或这新增文件拷贝到一个目录下。
本来希望能直接生成Nero的刻录清单的文件格式,后来找不到相关的资料就只好放弃了。

Download Source Code Project,VS2005 / VS2005 SP1, XP SP2/SP3下通过。



屏幕快照。红色表示新增文件,蓝色表示相同文件,黄色表示不完全对应。

posted on 2008-11-06 23:48 空明流转 阅读(2790) 评论(8)  编辑 收藏 引用

评论

# re: 文件夹比较备份工具 2008-11-07 08:37 ronliu
直接比较文件名和修改时间?
就像版本管理工具,比如vss那样。  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-07 09:11 天涯明月刀
还是beyond compare好用  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-07 09:14 饭中淹
博主的意思是不比较文件名,直接用md5互相比较,找出某一方没有,而另一方有的md5。这样就算修改了名字也不会有问题。

不过有一个问题需要考虑,如何避免垃圾文件,比如一方修改了名字也修改了内容的。这样同样意义的文件就出现了两个。


  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-07 10:10 ronliu
计算md5时间复杂度如何?  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-07 11:06 空明流转
@天涯明月刀
Beyond Compare不能将多个文件夹合并到一起当作一个虚拟文件夹来处理.
这个才是我写这个工具的根本目的.
ps,我是不用文件名的.
对于备份的情况而言,改个名字实在太稀松平常了.
  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-09 23:20 myy
这是我个人业余写的文件夹比较工具(下载包含delphi源码):
http://www.ccrun.com/view.asp?id=478

设计思路与楼主类似,可以看看。  回复  更多评论
  

# re: 文件夹比较备份工具 2008-11-30 21:20 tarchen
也想做这样的工具,就像你提到的一样,现在从网上下载了很多资料/软件等等,经常备份,也不知道,重复备份了吗?备份了多少次?有时间想整理时,如果一个目录一个目录的手工比较,费时费劲不说,最重要的是不要出错遗漏。所以很早就有想法自己做一个这样的软件,但是限于水平和时间,一直没有做好。
今天看到你的软件很是高兴。  回复  更多评论
  

# re: 文件夹比较备份工具 2008-12-12 22:02 xoyojank
Total Commander可以做到  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理