ein Mini-Tool produziert. Es sortiert doppelte MP3-Dateien
aus. Aber Achtung! Das Ding ist extrem langsam.
Anleitung:
Wählt das Verzeichnis aus das nach doppelten Dateien untersucht werden
soll. Es werden immer auch die Unterordner durchsucht.
Dann erscheinen im linken Listicongadget die gefundenen Dateien und im rechten Gadget die doppelten Dateien.
Wenn man jetzt auf löschen klickt werden die Dateien im rechten gadget komplett gelöscht.
Die Konstante #acu setzt die genaugkeit des Vergleichs fest.
Bei einem Wert von 1 - 100%
Code: Alles auswählen
#acu = 10
Procedure.l searchfile(path.s,type.s,gadgetid.l,startnum.l)
If Right(path,1) = "\"
path = Left(path,Len(path)-1)
EndIf
count.l = 0
If ExamineDirectory(startnum,path,"*.*") <> 0
Repeat
UseDirectory(startnum)
rturn.b = NextDirectoryEntry()
;Wenn eine Datei gefunden wurde
If rturn = 1 And GetExtensionPart(DirectoryEntryName()) = Right(type,Len(type)-2)
AddGadgetItem(gadgetid,-1,DirectoryEntryName()+Chr(10)+path+"\"+DirectoryEntryName())
count = count + 1
EndIf
;Wenn ein Pfad gefunden wurde
If rturn = 2 And Right(DirectoryEntryName(),1) <> "." And Right(DirectoryEntryName(),2) <> ".."
rsult.l = searchfile( path+"\"+DirectoryEntryName(),type,gadgetid,startnum +1)
If rsult = -1
rturn = 0
Else
count = count + rsult
EndIf
EndIf
Until rturn = 0
;Anzahl der Dateien die gefunden wurden zurückgeben
ProcedureReturn count
Else
;Fehlermeldung zurückgeben
ProcedureReturn -1
EndIf
EndProcedure
Procedure.b checkclnfiles(filea.s,fileb.s,accuracy.l)
ra.b = ReadFile(0,filea)
rb.b = ReadFile(1,fileb)
If ra <>0 And rb <>0
count.l = 0
gtback.b = 0
UseFile(0)
lena.l = Lof()
UseFile(1)
lenb.l = Lof()
If lena <> lenb
gtback = 0
Goto lenfail
EndIf
If accuracy < 1 Or accuracy > 100
Debug "Error 1 Accuracy to high or low!"
End
EndIf
maxlen.l = (lena/100)*accuracy
Repeat
count + 1
UseFile(0)
tbytea.b = ReadByte()
UseFile(1)
tbyteb.b = ReadByte()
If tbytea = tbyteb
gtback = 1
Else
gtback = 0
Break
EndIf
If count => maxlen
gtback = 1
Break
EndIf
Until Eof(0) And Eof(1)
lenfail:
CloseFile(0)
CloseFile(1)
ProcedureReturn gtback
Else
ProcedureReturn -1
EndIf
EndProcedure
OpenWindow(0,0,0,600,400,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget,"Clonekiller v1.0")
CreateGadgetList(WindowID(0))
Frame3DGadget(0,5,5,590,40,"Quellverzeichnis")
ButtonGadget(1,10,20,70,20,"Wählen")
ButtonGadget(2,85,20,70,20,"Start")
ButtonGadget(3,160,20,70,20,"Löschen")
StringGadget(4,235,20,350,20,"C:\",#PB_String_ReadOnly)
ListIconGadget(5,5,50,200,345,"Datei",100)
AddGadgetColumn(5, 1, "Pfad",500)
ListIconGadget(6,5,310,200,345,"Datei",100)
AddGadgetColumn(6, 1, "Pfad",500)
SplitterGadget(7, 5, 50, 590, 345, 5, 6 ,#PB_Splitter_Separator | #PB_Splitter_Vertical )
SetGadgetAttribute(7, #PB_Splitter_FirstMinimumSize, 50)
SetGadgetAttribute(7, #PB_Splitter_SecondMinimumSize,50)
Global winevent.l, gadgetevent.l, menuevent.l
Repeat
winevent = WaitWindowEvent()
gadgetevent = EventGadgetID()
menuevent = EventMenuID()
If winevent = #PB_Event_SizeWindow And IsWindow(1) = 0
UseWindow(0)
ResizeGadget(7,5,50,WindowWidth()-10,WindowHeight()-55)
EndIf
If gadgetevent = 1 And winevent = #PB_Event_Gadget
OpenWindow(1,0,0,250,400,#PB_Window_ScreenCentered,"Ordner wählen...",WindowID(0))
CreateGadgetList(WindowID(1))
ExplorerTreeGadget(8, 5, 5,240, 365, GetGadgetText(4), #PB_Explorer_NoFiles|#PB_Explorer_AlwaysShowSelection)
ButtonGadget(9,5,375,70,20,"Ok")
EndIf
If gadgetevent = 9 And winevent = #PB_Event_Gadget
SetGadgetText(4,GetGadgetText(8))
CloseWindow(1)
EndIf
If gadgetevent = 2 And winevent = #PB_Event_Gadget
MessageRequester("Information!","Das durchsuchen der Festplatte kann je nach Ordnerstruktur und Grösse mehrere Minuten dauern!")
EnableWindow_(WindowID(0),0)
searchfile(GetGadgetText(4),"*.mp3",5,0)
EnableWindow_(WindowID(0),1)
Dim check.b(CountGadgetItems(5)-1)
For x = 0 To CountGadgetItems(5)-1
If check(x) = 0
check(x) = 1
For y = 0 To CountGadgetItems(5)-1
If check(y) = 0
If checkclnfiles(GetGadgetItemText(5, x, 1),GetGadgetItemText(5, y, 1),#acu) = 1
check(y) = 1
AddGadgetItem(6,-1,GetGadgetItemText(5, y, 0)+Chr(10)+GetGadgetItemText(5, y, 1))
EndIf
EndIf
Next
EndIf
Next
MessageRequester("Fertig...","Das durchsuchen der Dateien wurde beendet!")
EndIf
If gadgetevent = 3 And winevent = #PB_Event_Gadget
For x = 0 To CountGadgetItems(6)
DeleteFile(GetGadgetItemText(6,x,1))
Next
ClearGadgetItemList(6)
EndIf
Until winevent = #PB_Event_CloseWindow
CloseWindow(0)
End