用什么方法比较两个文件是否相同?

大地主刘发财 2014-05-05 01:48:23
想要做个同步的小软件,现在就是没弄明白到底怎么比较两个文件是否相同,特别是文件名不一样的,比较大小和日期不靠谱,读取整个文件算MD5的话又太低性能了,实在是想不出来该怎么办了,求大神给个方法,不需要代码,只要告诉我用什么方法就行~一直好奇那些个网盘是怎么判定文件是否相同的.
...全文
1255 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimil 2014-05-08
  • 打赏
  • 举报
回复
楼上各位已经给了你答案,我总结一下。 如果是普通应用,MD5应该够了,但速度如果是大文件,的确快不起来。 网盘我没开发过,但估算了一下,如果是上传后进行MD5对比,明显是比较弱智的解决方案,它肯定是在上传时就已经在产生MD5,上传是分段的,正好利用这段时间来生成文件流,这样才效率最大化。或是以什么形式保存在内存中,这样最后生成MD5也非常快,但肯定一点,绝对不是上传完成后去读硬盘的文件再生成MD5。
风吹腚腚凉 2014-05-08
  • 打赏
  • 举报
回复
还有一个方法就是给每个数据定义一个日期之类的表示,没修改一条记录一下修改日期,然后取最大的日期比较一下上一次备份的日期。
  • 打赏
  • 举报
回复
如果你要100%相同的话,就肯定要读取整个文件进行遍历对比了,光判断Md5也是不靠谱的
  • 打赏
  • 举报
回复
文件头,文件尾+随机N个点的文件流,如果都相等,就可以认为是同一个文件了
风吹腚腚凉 2014-05-08
  • 打赏
  • 举报
回复
引用 5 楼 lovesan 的回复:
是一些软件的备份文件 自动备份的,这个软件比较恶心,如果备份的时候数据没有变化它就会把上次的备份复制一份改个名,这样就存在了不同文件名的两个完全相同的文件了..我想自动把文件传到备份服务器上,
哦这样啊,那就没办法了 只能遍历对比,或者你随机对比几个地方?但是不保险啊,按照逻辑来说100%正确的话就要遍历对比了。
大地主刘发财 2014-05-05
  • 打赏
  • 举报
回复
是一些软件的备份文件 自动备份的,这个软件比较恶心,如果备份的时候数据没有变化它就会把上次的备份复制一份改个名,这样就存在了不同文件名的两个完全相同的文件了..我想自动把文件传到备份服务器上,
风吹腚腚凉 2014-05-05
  • 打赏
  • 举报
回复
引用 楼主 lovesan 的回复:
想要做个同步的小软件,现在就是没弄明白到底怎么比较两个文件是否相同,特别是文件名不一样的,比较大小和日期不靠谱,读取整个文件算MD5的话又太低性能了,实在是想不出来该怎么办了,求大神给个方法,不需要代码,只要告诉我用什么方法就行~一直好奇那些个网盘是怎么判定文件是否相同的.
什么文件啊? 加个标记不就完事了么,每个文件更新的时候在文件内部或者某些地方定义一个版本号,如果版本号一致就相同不一致就不同。
threenewbee 2014-05-05
  • 打赏
  • 举报
回复
没有办法在不遍历整个文件一次的情况下判断文件是否相同。 但是如果我们的程序可以监控文件的读写,那么只要在程序启动前完整判断一次就可以了。
zj_zwl 2014-05-05
  • 打赏
  • 举报
回复
感觉md5比较靠谱
  • 打赏
  • 举报
回复
网盘就是根据最后修改时间来同步的。有些网盘极速上传是根据md5值来操作的。不过根据md5值无法判断怎么同步。只能判断两个文件是否一样。

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧