找回密码
 加入
搜索
查看: 7133|回复: 21

[系统综合] 如何比较两个文件夹是否内容相同?

 火.. [复制链接]
发表于 2012-3-31 07:25:49 | 显示全部楼层 |阅读模式
本帖最后由 boyhong 于 2012-3-31 08:39 编辑

如何比较两个文件夹是否内容相同?

有两个文件夹,如何快速比较这两个文件夹内文件及子文件夹内容能完全一样?

求实现想法?谢啦。

本想用如下比较,但感觉还是不够精确,数目相同并不代表两个文件就一定一样。。。。。
DirGetSize ( "路径" [, 标志] )
$array[0] = 空间大小
$array[1] = 文件数
$array[2] = 文件夹数

看到一个用md5来比较文件的,但有一个DLLL要fileinstall,只好放弃了,不知有没有纯AU3的。。。。,。。。。另:要考虑文件夹还有子文件夹,兼容64位系统谢谢。
发表于 2012-3-31 08:23:57 | 显示全部楼层
文件夹也能用 MD5 来比较啊?
希望这问题早点能解决, 给我拓展下知识!
 楼主| 发表于 2012-3-31 08:40:54 | 显示全部楼层
文件夹也能用 MD5 来比较啊?
希望这问题早点能解决, 给我拓展下知识!
user3000 发表于 2012-3-31 08:23



    不好意思,少打两个字,文件。目前我仍然没有找着一个满意的方法。。。不知大家会如何处理此问题?
发表于 2012-3-31 09:01:36 | 显示全部楼层
不好意思,少打两个字,文件。目前我仍然没有找着一个满意的方法。。。不知大家会如何处理此问题 ...
boyhong 发表于 2012-3-31 08:40


我经常用的 BC对比, 它有许多种对比模式.
包括 MD5.
话说回来, au3读取文件的 MD5 值是很方便的. 为什么要用 DLL ?
 楼主| 发表于 2012-3-31 10:01:44 | 显示全部楼层
我经常用的 BC对比, 它有许多种对比模式.
包括 MD5.
话说回来, au3读取文件的 MD5 值是很方便的. 为什 ...
user3000 发表于 2012-3-31 09:01



   “ au3读取文件的 MD5 值”  在64位WIN7下失败。。。。
另,文件夹比对,你的用的是BC对比?不明白,抱歉。请指教,谢谢。
发表于 2012-3-31 10:24:25 | 显示全部楼层
“ au3读取文件的 MD5 值”  在64位WIN7下失败。。。。
另,文件夹比对,你的用的是BC对比?不明 ...
boyhong 发表于 2012-3-31 10:01


Beyong Compare 工具.  名气应该不小吧.
FastCopy 也有一定对比功能, 没前者好, 却胜任大容量拷贝工作.
发表于 2012-3-31 12:27:38 | 显示全部楼层
提供个不严谨的方法:
可以对比两个文件的大小,没有这么凑巧的事情吧
也可以再加判断
发表于 2012-3-31 12:28:42 | 显示全部楼层
算我没说。。。。
发表于 2012-3-31 20:15:58 | 显示全部楼层
回复 8# 502762378
为什么没有
发表于 2012-3-31 21:25:47 | 显示全部楼层
回复 10# netegg


    我没细看楼主内容,楼主已经觉得判断文件大小不精确了
发表于 2012-3-31 21:33:53 | 显示全部楼层
_WinAPI_FindFirstChangeNotification相关还有两个函数,看看也许有启发
发表于 2012-3-31 21:35:57 | 显示全部楼层
回复 10# netegg
蛋哥,应该是小概率事件了吧?
发表于 2012-3-31 22:17:18 | 显示全部楼层
希望高手提供实例

评分

参与人数 1贡献 -1 收起 理由
afan -1

查看全部评分

发表于 2012-4-1 10:24:29 | 显示全部楼层
这个小弟真不懂,不过小第在用一个文件夹同步软件
他是 对比 ===>文件名, 大小,修改时间,属性。然后不不同的列出来看想要而定

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-4-1 10:51:25 | 显示全部楼层
本帖最后由 zcx880517 于 2012-4-1 22:04 编辑


#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
$FORM = GUICREATE( "文件对比工具" , 230 , 130 ) 
GUICTRLCREATELABEL( "目录1:" , 15 , 15 , 45 , 18 ) 
$INPUT1 = GUICTRLCREATEINPUT( "" , 60 , 15 , 125 , 18 ) 
$BUTTON1 = GUICTRLCREATEBUTTON( "浏览" , 185 , 15 , 30 , 18 ) 
GUICTRLCREATELABEL( "目录2:" , 15 , 45 , 45 , 18 ) 
$INPUT2 = GUICTRLCREATEINPUT( "" , 60 , 45 , 125 , 18 ) 
$BUTTON2 = GUICTRLCREATEBUTTON( "浏览" , 185 , 45 , 30 , 18 ) 
GUICTRLCREATELABEL( "紧比对:" , 15 , 75 , 50 , 18 ) 
$RADIO1 = GUICTRLCREATERADIO( "全部" , 65 , 75 , 45 , 18 ) 
GUICTRLSETSTATE( $RADIO1 , $GUI_CHECKED ) 
$RADIO2 = GUICTRLCREATERADIO( "目录" , 118 , 75 , 45 , 18 ) 
$RADIO3 = GUICTRLCREATERADIO( "文件" , 170 , 75 , 45 , 18 ) 
$CHECKBOX = GUICTRLCREATECHECKBOX( "应用到所有子目录" , 25 , 105 , 130 , 18 ) 
$OK = GUICTRLCREATEBUTTON( "OK" , 155 , 105 , 50 , 18 ) 
GUISETSTATE( @SW_SHOW ) 
WHILE 1 
SWITCH GUIGETMSG( ) 
CASE $BUTTON1 
$PATH1 = FILESELECTFOLDER( "选择目录(1)" , "" , 2 ) 
IF @ERROR <> 1 THEN GUICTRLSETDATA( $INPUT1 , $PATH1 ) 
CASE $BUTTON2 
$PATH2 = FILESELECTFOLDER( "选择目录(2)" , "" , 2 ) 
IF @ERROR <> 1 THEN GUICTRLSETDATA( $INPUT2 , $PATH2 ) 
CASE $OK 
IF GUICTRLREAD( $INPUT1 ) <> "" AND GUICTRLREAD( $INPUT2 ) <> "" THEN 
WINSETSTATE( $FORM , "" , @SW_HIDE ) 
TOOLTIP( @CR & "程序正在比对文件" & @CR , @DESKTOPWIDTH - 260 , @DESKTOPHEIGHT - 120 ) 
LOCAL $REPORT = FILEOPEN( "Report.txt" , 2 ) 
_CMP ( GUICTRLREAD( $INPUT1 ) , GUICTRLREAD( $INPUT2 ) ) 
_CMP ( GUICTRLREAD( $INPUT2 ) , GUICTRLREAD( $INPUT1 ) ) 
FILECLOSE( $REPORT ) 
MSGBOX( 0 , "ok" , "全部文件已比对完成。") 
RUN( "Notepad Report.txt" ) 
EXIT 
ELSE 
MSGBOX( 0 + 48 , "提示" , "比对目录不能为空!" ) 
ENDIF 
CASE $GUI_EVENT_CLOSE 
EXIT 
ENDSWITCH 
WEND 
FUNC _CMP ( $DIR1 = "" , $DIR2 = "" ) 
IF STRINGRIGHT( $DIR1 , 1 ) <> "\" THEN $DIR1 &= "\" 
IF STRINGRIGHT( $DIR2 , 1 ) <> "\" THEN $DIR2 &= "\" 
LOCAL $FOLEXISTNUM = 0 , $FILEXISTNUM = 0 , $FOLEXISTNAME = "" , $FILEXISTNAME = "" 
LOCAL $FOLNOTEXISTNUM = 0 , $FILNOTEXISTNUM = 0 , $FOLNOTEXISTNAME = "" , $FILNOTEXISTNAME = "" 
LOCAL $SEARCH , $FILE 
$SEARCH = FILEFINDFIRSTFILE( $DIR1 & "*.*" ) 
WHILE 1 
$FILE = FILEFINDNEXTFILE( $SEARCH ) 
IF @ERROR THEN EXITLOOP 
IF GUICTRLREAD( $CHECKBOX ) = $GUI_CHECKED THEN 
IF STRINGINSTR( FILEGETATTRIB( $DIR1 & $FILE ) , "D" ) THEN _CMP ( $DIR1 & $FILE , $DIR2 & $FILE ) 
ENDIF 
IF FILEEXISTS( $DIR2 & $FILE ) THEN 
IF STRINGINSTR( FILEGETATTRIB( $DIR2 & $FILE ) , "D" ) THEN 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO2 ) = $GUI_CHECKED THEN 
$FOLEXISTNUM += 1 
$FOLEXISTNAME &= $FILE & @CRLF 
ENDIF 
ELSE 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO3 ) = $GUI_CHECKED THEN 
$FILEXISTNUM += 1 
$FILEXISTNAME &= $FILE & @CRLF 
ENDIF 
ENDIF 
ELSE 
IF STRINGINSTR( FILEGETATTRIB( $DIR1 & $FILE ) , "D" ) THEN 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO2 ) = $GUI_CHECKED THEN 
$FOLNOTEXISTNUM += 1 
$FOLNOTEXISTNAME &= $FILE & @CRLF 
ENDIF 
ELSE 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO3 ) = $GUI_CHECKED THEN 
$FILNOTEXISTNUM += 1 
$FILNOTEXISTNAME &= $FILE & @CRLF 
ENDIF 
ENDIF 
ENDIF 
WEND 
FILECLOSE( $SEARCH ) 
FILEWRITELINE( $REPORT , @CRLF & $DIR1 & @CRLF & @CRLF ) 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO2 ) = $GUI_CHECKED THEN 
FILEWRITELINE( $REPORT , "  相同目录数: " & $FOLEXISTNUM & " 多出目录数: " & $FOLNOTEXISTNUM ) 
ENDIF 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO3 ) = $GUI_CHECKED THEN 
FILEWRITELINE( $REPORT , "  相同文件数: " & $FILEXISTNUM & " 多出文件数: " & $FILNOTEXISTNUM ) 
ENDIF 
FILEWRITELINE( $REPORT , @CRLF ) 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO2 ) = $GUI_CHECKED THEN 
IF $FOLEXISTNUM > 0 THEN FILEWRITELINE( $REPORT , "  相同目录列表:" & @CRLF & $FOLEXISTNAME & @CRLF ) 
IF $FOLNOTEXISTNUM > 0 THEN FILEWRITELINE( $REPORT , "  多出目录列表:" & @CRLF & $FOLNOTEXISTNAME & @CRLF ) 
ENDIF 
IF GUICTRLREAD( $RADIO1 ) = $GUI_CHECKED OR GUICTRLREAD( $RADIO3 ) = $GUI_CHECKED THEN 
IF $FILEXISTNUM > 0 THEN FILEWRITELINE( $REPORT , "  相同文件列表:" & @CRLF & $FILEXISTNAME & @CRLF ) 
IF $FILNOTEXISTNUM > 0 THEN FILEWRITELINE( $REPORT , "  多出文件列表:" & @CRLF & $FILNOTEXISTNAME & @CRLF ) 
ENDIF 
ENDFUNC  
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 16:16 , Processed in 0.083827 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表