AZJIO Posted July 8, 2010 Posted July 8, 2010 (edited) Does Not work removing need help line 100 expandcollapse popup; ; @AZJIO 2010.07.7 #include <Crypt.au3> #include <File.au3> #include <Array.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #NoTrayIcon Global $Stack[50], $Stack1[50] Global $aArr, $a, $MD5Path HotKeySet('{ESC}', "_Quit") $Gui = GUICreate("Search duplicates", 500, 444, -1, -1, 0x00040000, 0x00000010) $CatchDrop = GUICtrlCreateInput("", 0, 0, 500, 440) GUICtrlSetState(-1, 136) GUICtrlSetResizing(-1, 1) $StatusBar = GUICtrlCreateLabel(@CRLF&'Statusbar AZJIO 2010.07.7', 5, 380, 480, 30) GUICtrlSetResizing(-1, 512 + 256 + 64 + 2) $restart = GUICtrlCreateButton("R", 480, 2, 18, 20) GUICtrlSetTip(-1, "Restart") GUICtrlCreateLabel("drag-and-drop", 200, 5, 160, 18) GUICtrlSetResizing(-1, 3 + 32 + 256 + 512) GUICtrlCreateLabel("Folder", 15, 5, 60, 17) GUICtrlSetResizing(-1, 3 + 32 + 256 + 512) $folder = GUICtrlCreateList("", 10, 25, 480, 100) GUICtrlSetResizing(-1, 7 + 32 + 512) ; GUICtrlCreateLabel("Duplicates", 15, 130, 60, 18) ; GUICtrlSetResizing(-1, 3 + 32 + 256 + 512) ; $Dubl = GUICtrlCreateList ("", 10, 150, 480, 200) $Dubl = _GUICtrlListView_Create($Gui, ' ', 10, 130, 480, 220, -1, -1, True) _GUICtrlListView_SetExtendedListViewStyle($Dubl, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES,$LVS_OWNERDRAWFIXED)) _GUICtrlListView_SetBkColor($Dubl, 0xf0f0f0) _GUICtrlListView_SetTextBkColor($Dubl, 0xf0f0f0) _GUICtrlListView_EnableGroupView($Dubl) _GUICtrlListView_SetColumn($Dubl, 0, 'Duplicates', 480) ;$Dubl = GUICtrlCreateListView(' ', 10, 150, 480, 200, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_CHECKBOXES) ;GUICtrlSetBkColor(-1, 0xf0f0f0) ; 0xE0DFE3 ;GUICtrlSetResizing($Dubl, 7 + 32 + 64) ; $Select = GUICtrlCreateButton("Select", 180, 355, 70, 25) ; GUICtrlSetResizing(-1, 512 + 256 + 64 + 4) $Clear = GUICtrlCreateButton("Clear", 260, 355, 70, 25) GUICtrlSetResizing(-1, 512 + 256 + 64 + 4) $Search = GUICtrlCreateButton("Search", 340, 355, 70, 25) GUICtrlSetResizing(-1, 512 + 256 + 64 + 4) $Delete = GUICtrlCreateButton("Delete", 420, 355, 70, 25) GUICtrlSetResizing(-1, 512 + 256 + 64 + 4) $aSizePath='' $folderList = '' GUISetState() _Crypt_Startup() While 1 $msg = GUIGetMsg() Select ; drag-and-drop Case $msg = -13 $triger = 0 If @GUI_DropId = $CatchDrop Then $aFolder = StringSplit(GUICtrlRead($CatchDrop), '|') $GuiPos = WinGetPos($Gui) GUICtrlSetPos($CatchDrop, $GuiPos[2], 0) GUICtrlSetData($CatchDrop, '') GUICtrlSetPos($CatchDrop, 0, 0) For $i = 1 To $aFolder[0] If StringInStr(FileGetAttrib($aFolder[$i]), "D") = 0 Then $triger = 1 Else GUICtrlSetData($folder, StringRegExpReplace($aFolder[$i], '(?:.*)\\(.*), '\1')) $folderList &= '|' & $aFolder[$i] EndIf Next EndIf If $triger = 1 Then $triger = 0 MsgBox(0, "Error", 'Only folders.') EndIf Case $msg = $Clear _GUICtrlListView_DeleteAllItems($Dubl) $folderList = '' GUICtrlSetData($folder, '') GUICtrlSetData($Dubl, '') $aSizePath = '' $aArr = '' $aArrT = '' $TempMD5 = '' $aArrOut = '' $aArrMD5 = '' Case $msg = $Delete GUICtrlSetData($StatusBar, 'Start Delete...') ;_GUICtrlListView_EnableGroupView($Dubl,False) ;_ArrayDisplay($aArrOut, "$aArrOut") For $i = 1 to $aArrOut[0][0] ;_ArrayDisplay(_GUICtrlListView_GetItem($Dubl, $i), "step "& $i) $zTrig=0 ;MsgBox(0, 'Message', $aArrOut[0][0] &@CRLF& $i) If _GUICtrlListView_GetItemChecked($Dubl,$aArrOut[$i][0])=1 And FileExists($aArrOut[$i][1]) Then ;MsgBox(0, 'step - '&$i, $aArrOut[0][0]&' - total' &@CRLF& $aArrOut[$i][0]&' - ID' &@CRLF&'Path - ' &$aArrOut[$i][1]) ; If $zTrig=1 And _GUICtrlListView_GetItemChecked($Dubl,$aArrOut[$i-1][0])=1 And FileExists($aArrOut[$i-1][1]) Then ; $zTrig=0 ; FileDelete($aArrOut[$i-1][1]) ; _GUICtrlListView_DeleteItem($Dubl, $aArrOut[$i-1][0]) ; EndIf ; $zTrig=1 FileDelete($aArrOut[$i][1]) _GUICtrlListView_DeleteItem($Dubl, $aArrOut[$i][0]) $aArrOut[$i][0]='' $aArrOut[$i][1]='' EndIf Next ;_ArrayDisplay($aArrOut, "$aArrOut") GUICtrlSetData($StatusBar, 'Removed') Case $msg = $Search If $aSizePath<>'' Then _GUICtrlListView_DeleteAllItems($Dubl) GUICtrlSetData($Dubl, '') $aSizePath = '' $aArr = '' $aArrT = '' $TempMD5 = '' $aArrOut = '' $aArrMD5 = '' EndIf $aSizePath = '' $timer = TimerInit() If StringLeft($folderList, 1)='|' Then $folderList = StringTrimLeft($folderList, 1) $aFolderList = StringSplit($folderList, '|') For $i = 1 To $aFolderList[0] If FileExists($aFolderList[$i]) Then FileFindNextFirst($aFolderList[$i]) While 1 $tempname = FileFindNext() If $tempname = "" Then ExitLoop $aSizePath &= '|' & FileGetSize($tempname) & '|' & $tempname WEnd EndIf Next $aArrT = StringSplit(StringTrimLeft($aSizePath, 1), "|") $aSizePath='1' ;clear and indicator ;_ArrayDisplay($aArrT, "$aArrT") ; (size|path) ;_ArrayDisplay($aArrT,"$aArrT",-1,-1,-1,-1, 'size|path') Dim $aArr[$aArrT[0] / 2 + 1][2] $aArr[0][0] = $aArrT[0] / 2 For $i = 1 To $aArrT[0] If Mod($i, 2) = 0 Then $aArr[$i / 2][0] = Int($aArrT[$i - 1]) $aArr[$i / 2][1] = $aArrT[$i] EndIf Next _ArraySort($aArr, 0, 1, $aArr[0][0], 0) ;_ArrayDisplay($aArr, "$aArr") $aArrOut = '' Dim $aArrOut[1][2] $a = 0 $0b = 0 $gp=0 $kol=0 $triger = 0 $triger2 = 0 $TempSize = '' For $i = 1 To $aArr[0][0] $kol+=1 If $aArr[$i][0] = $TempSize Then If $triger = 0 Then $MD5Path = '' $MD5Path &= '|' & _Crypt_HashFile($aArr[$i - 1][1], 0x00008003) & '|' & $aArr[$i - 1][1] EndIf $triger = 1 $MD5Path &= '|' & _Crypt_HashFile($aArr[$i][1], 0x00008003) & '|' & $aArr[$i][1] Else $triger = 0 EndIf If $aArr[0][0]=2 and $triger = 1 Then $triger2 = 1 If $i = $aArr[0][0] Then $triger = 0 If $triger = 0 And $triger2 = 1 Then ; ====================================== $aMD5PathT = StringSplit(StringTrimLeft($MD5Path, 1), "|") ;_ArrayDisplay($aMD5PathT, "$aMD5PathT") Dim $aArrMD5[$aMD5PathT[0] / 2 + 1][2] $aArrMD5[0][0] = $aMD5PathT[0] / 2 For $o = 1 To $aMD5PathT[0] If Mod($o, 2) = 0 Then $aArrMD5[$o / 2][0] = $aMD5PathT[$o - 1] $aArrMD5[$o / 2][1] = $aMD5PathT[$o] EndIf Next _ArraySort($aArrMD5, 0, 1, $aArrMD5[0][0], 0) ;_ArrayDisplay($aArrMD5, "$aArrMD5") ;=================================================================== $0triger = 0 $0triger2 = 0 $TempMD5 = '' For $0i = 1 To $aArrMD5[0][0] If $a-$0b < 3 Then $a+=100 ReDim $aArrOut[$a][2] EndIf ;If $aArrMD5[$0i][0] = $TempMD5 and $aArrMD5[$0i][0]<>'' Then If $aArrMD5[$0i][0] = $TempMD5 Then If $0triger = 0 Then $0b += 1 $gp+=1 _GUICtrlListView_InsertGroup($Dubl, -1, $gp, '---'&$gp&'---') GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', current: '&$kol &', group: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000)&', size: '& Ceiling($aArr[$i][0]/1000)& 'kb' &@CRLF& $aArrMD5[$0i - 1][1]) $aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i - 1][1]) _GUICtrlListView_SetItemGroupID($Dubl, $aArrOut[$0b][0], $gp) $aArrOut[$0b][1] = $aArrMD5[$0i - 1][1] EndIf $0triger = 1 $0b += 1 GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', current: '&$kol &', group: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000) &', size: '& Ceiling($aArr[$i][0]/1000)& 'kb' &@CRLF& $aArrMD5[$0i][1]) $aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i][1]) _GUICtrlListView_SetItemGroupID($Dubl, $aArrOut[$0b][0], $gp) _GUICtrlListView_SetItemChecked($Dubl,$aArrOut[$0b][0]) $aArrOut[$0b][1] = $aArrMD5[$0i][1] Else $0triger = 0 EndIf ;_ArrayDisplay($aArrOut, "$aArrOut") ; If $0i = $aArrMD5[0][0] Then $0triger = 0 ; If $0triger = 0 And $0triger2 = 1 Then ;$gp+=1 ;_GUICtrlListView_InsertGroup($Dubl, -1, $gp, '---'&$gp&'---') ;_GUICtrlListView_AddItem($Dubl, ' ') ;GUICtrlSetState(-1,128) ; EndIf ; If $0triger = 1 Then ; $0triger2 = 1 ; Else ; $0triger2 = 0 ; EndIf $TempMD5 = $aArrMD5[$0i][0] _GUICtrlListView_SetColumnWidth($Dubl, 0, $LVSCW_AUTOSIZE) ;_GUICtrlListView_SetColumn($Dubl, 0, ' ', 480) Next EndIf ;================================================================================================================== If $triger = 1 Then $triger2 = 1 Else $triger2 = 0 EndIf $TempSize = $aArr[$i][0] Next ReDim $aArrOut[$0b+1][2] $aArrOut[0][0]=$0b GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', groups: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000) &@CRLF& 'Executed!') ;_ArrayDisplay($aArrOut, "$aArrOut") Case $msg = $restart _restart() Case $msg = -3 _Crypt_Shutdown() Exit EndSelect WEnd ;======================================== Func FileFindNextFirst($FindCat) $Stack[0] = 1 $Stack1[1] = $FindCat $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*") Return $Stack[$Stack[0]] EndFunc ;==>FileFindNextFirst Func FileFindNext() While 1 $file = FileFindNextFile($Stack[$Stack[0]]) If @error Then FileClose($Stack[$Stack[0]]) If $Stack[0] = 1 Then Return "" Else $Stack[0] -= 1 ContinueLoop EndIf Else If StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then $Stack[0] += 1 $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*") ContinueLoop Else Return $Stack1[$Stack[0]] & "\" & $file EndIf EndIf WEnd EndFunc ;==>FileFindNext Func _restart() Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3" Local $sRunLine, $sScript_Content, $hFile $sRunLine = @ScriptFullPath If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""' If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw $sScript_Content &= '#NoTrayIcon' & @CRLF & _ 'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _ ' Sleep(10)' & @CRLF & _ 'WEnd' & @CRLF & _ 'Run("' & $sRunLine & '")' & @CRLF & _ 'FileDelete(@ScriptFullPath)' & @CRLF $hFile = FileOpen($sAutoIt_File, 2) FileWrite($hFile, $sScript_Content) FileClose($hFile) Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE) Sleep(1000) Exit EndFunc ;==>_restart Func _Quit() Exit EndFunc ;==>_Quit Synchronization $aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i][1]) $aArrOut[$0b][1] = $aArrMD5[$0i][1] string 109 (discrepancy) MsgBox(0, 'step - '&$i, $aArrOut[0][0]&' - total' &@CRLF& $aArrOut[$i][0]&' - ID' &@CRLF&Path - ' &$aArrOut[$i][1] &@CRLF& ItemText- ' & _GUICtrlListView_GetItemText($Dubl,$aArrOut[$i][0])) Edited July 8, 2010 by AZJIO My other projects or all
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now