AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte SearchSameFiles v2.0 (SSF)
Thema durchsuchen
Ansicht
Themen-Optionen

SearchSameFiles v2.0 (SSF)

Ein Thema von himitsu · begonnen am 17. Aug 2005 · letzter Beitrag vom 2. Apr 2010
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von himitsu
himitsu Online
Registriert seit: 11. Okt 2003
Beiträge zur Version 2 ab hier:
http://www.delphipraxis.net/internal...=663073#663073

aktueller Download immer noch im ersten (diesem) Beitrag


************************************************** *****************


Ich wollte nur mal ein kleines Programmchen vorstellen und nachfragen ob es für'n Anfang i.O. ist?
Außerdem würde ich gern wissen, ob sowas überhaut noch Jemand gebrauchen kann und ob's sich auch lohnt, wenn ich das noch weiterentwickeln würde.
>> Arbeitsspeicher, Geschwindigkeit/Durchsatz(KB/s) und was sonst noch wichig ist

Es vergleicht alle Dateien in dem angegebenen Verzeichnis und seiner Unterverzeichnisse miteinander und gibt am Ende eine Liste mit allen Dateien aus, welche den selben Inhalt haben.


Seit aber nicht all zu hart zu mir ... dieses ist nur so'n kleines Nebenprojekt und ich hatte halt nicht gerade viel Arbeitszeit reingestecken können.
Und das an der Optik/Bediehnung unbedingt noch einiges gemacht werden muß, ist mir bekannt.

Und dafür, daß es Funktionen meines "neuen" UCC verwendet und derzeit das 2. größere (NichtDemo)Programm ist, welches darauf aufbaut, lauffähig ist und anscheinend ohne Probleme läuft, bin ich erstmal damit zufrieden und die Hoffnung der baldigen UCC-Veröffentlichung steigt immer mehr in mir auf (na ja, 2 winzige Kleinigkeiten wurmen mich immernoch).


Intern basiert es ja auf meinem UCC und sonst ist da noch nicht so viel drin.
Zitat von SourceCode Counter von JLSoft Software:
SearchSameFiles.dpr 12 Zeilen 247 Byte 213 Zeichen
SearchSameFilesU.pas 220 Zeilen 7.9 KB 6190 Zeichen
[add]hat jetzt'n paar Zeilchen mehr ... sowar passiert halt, wenn man etwas aufrüstet -.-''
Verglichen werden die Dateien, aus Performancegründen, per CRC32.
Einen vorzeitigen Abbruch bekommt man über das nette [X].


Ach ja: im Moment werden weder Registry, noch irgendwelche anderen Einträge/Veränderungen in/an eurem System vorgenommen.
Es gibt also nur diese "kleine" EXE, welche wirklich nur nach gleichen Dateien sucht ^^



PS: ich hab durch dieses Programm gelernt, wie man die Speicherverwaltung des Heap aushebeln kann.
Durch die staren und nicht verschiebbargen Blöcke hatte ich auf Grund der 2 verwendeten Haupt-Arrays und mit lediglich 55.000 Vergleichsdateien ein massiges Speicherproblem bekommen.
Es gab also nach einer Weile einen kleine Exception (Out of Memory) ... na ja, über 300 MB RAM+Pagefile war wohl 'n bissl zuviel -.-''
Aber nach 'ner kleinen Optimierung bei den Arrays und Strings konnte einiges an Speicher eingesparrt werden (bei meinem Testlauf sind es jetzt nur noch rund 5 MB).
Und ein optimierteres SetLength brachte auch noch etwas Tempo mit rein.


Zum Schluß bleibt dann nur noch eine Überlegung:
Soll ich den Quellcode für dieses Programm ebenfalls veröffentlichen und in Ruhe zusehen, ob nicht zufällig jemand etwas mehr Zeit investieren kann und daraus vielleicht doch noch was großartiges macht?
Angehängte Dateien
Dateityp: exe searchsamefilessfx_138.exe (342,5 KB, 85x aufgerufen)
Dateityp: zip searchsamefiles_197.zip (451,1 KB, 159x aufgerufen)
Dateityp: zip searchsamefiles_1__letzte_sourcen___exe_v0.65___v0.7__100.zip (443,4 KB, 75x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
 
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#31
  Alt 31. Mär 2007, 15:25
So, nochmal ^^

Ich hoffe die "Beschreibung" in der RTF is verständlich.


Bitte mal die EXE testen, hab da vorallem den TopHash gegen BackHash getauscht.

Also forher wurde der 2. Teilhash ab Dateianfang gebildet und nun am Dateiende.
Ich denk zwar daß es dort keine Probleme gibt, aber da ich ja nur in ganzen Sektoren (wegen NonCached) lese, gäbe es Probleme, wenn da nicht an Sektorgrenzen angefangen wird, also wenn da meine Berechnung Länge/Startpos fehlerhaft wäre, würde es nicht funktionieren ._.


Wenn's klappt, dann sollte da noch ein bissl/viel Geschwindigkeitssteigerung herauskommen,
vorallem bei Datei, wo nur das Dateiende verändert wurde ... wie z.B. die ID3-Tags bei Mediadateien.


Sobald ich das Popupmenü fertig überarbeitet hab, kommt's dann wieder als offizielle Version, mit QuellCode raus.

[edit 04.08.09] anhang entfernt
Angehängte Dateien
Dateityp: txt searchsamefiles2.rtf_161.txt (297,9 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#32
  Alt 31. Mär 2007, 20:12
Upps, nach einem Stop kam das:

Delphi-Quellcode:
---------------------------
   | SearchSameFiles
---------------------------
Zugriffsverletzung bei Adresse 004C0FD0 in Modul 'SearchSameFiles2.exe'. Lesen von Adresse FFFFFFFE.
---------------------------
OK
---------------------------
Matti
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#33
  Alt 2. Apr 2007, 10:53
Wo kam dat denn her?

Nur einmal, oder reproduzierbar?


hmmm, FFFFFFFE klingt nach -2, aber dat kann eigentlich nich sein :grübel:
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#34
  Alt 5. Apr 2007, 18:56
So, hatte jetzt per Zufall auch mal soeine Fehlermeldung bekommen,
allerdings (reproduzierbar) immer nur dann, wenn ein selektierter Eintrag gelöscht wurde.

Hab dann ewig gesucht und dann durch Zufall rausbekommen, daß die ListView versuchte den Eintrag wärend des löschens (als die davon Selektion entfernt wurde) neu zeichnete und ich vorher schon die Daten im Item freigegeben hatte, welche ja für's Neuzeichnen nötig waren.
(bin da fast verrückt geworden, bei der Suche )


@turboPASCAL: bist du sicher, das es beim Stop war?
weil da ist ja eigentlich die Liste noch leer und das Zeichenproblem dürfte da nicht auftauchen.
Oder hast zumindestens den Fehler nochmals gefunden?


So, dann ist mir jetzt aufgefallen, daß ich beim ganzen Umgebaue die Löschroutine vergessen hatte, so daß da zu 99% nicht gelöscht wurde.
(Naja, zumindestens wurde nicht was Falsches gelöscht)


Das Unterstreichproblem wärend der Suche überseh ich nun einfach (wäre ein zugroßer aufwand da was gegen zu unternehmen ... und das nur wegen den paar "unbedeutenden" Strichen

Ansonsten hab ich nun auch nochmals angefangen in dem PopupMenü weiterzumachen und alles zu kontrolieren.
(die Einträge ohne * sollten also funktionieren)

Außerdem gab's 'ne Überarbeitung beim LinkCode ... also da wo die angeklickten Links aufgerufen werden.
> wenn alles klappt, dann sollten die wögliches in einem neuen Browserfenster aufgehn und das jeweils im Standardbrowser ... wär schön, wenn das mal ein paar cht-IE-Nutzer mit prüfen könnten.


Der HTML-Export müßte nun auch funktionieren.
> die letzen Fehler bei der UTF-8/HTML-Codierung wurden behoben (die Dateinamen sind ja als Unicode vorhanden)
> und die Datei W3C-konform ausgelegt

Bei dem BinärImport werden ältere Dateien nicht mehr unterstützt, da sich Dateiversion geändert hatte ... aufgrund 'ner kleinen Änderung im Format.

[edit 04.08.09] anhang entfernt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#35
  Alt 31. Jul 2009, 09:45
OK, hab es nun endlich soweit...
bin jetzt bei Version 3 angelangt, da alles komplett von Grund auf neu geschrieben wurde.

Aktuell funktioniert aber nur der Such-&Vergleichalgo und eine erste Variante der Anzeige.
Mir geht es aber zu diesem Stadium auch erstmal nur darum, daß der innere Teil (Suchen und Vergleichen) und der Refresh der Anzeige läuft.
- eine besser Anzeige und die Bearbeitung des Suchergebnisses kommen noch.

Es wird im Programmverzeichnis eine XML mit den Einstellungen gespeichert (der Auswahldialog für das Speicherverzeichnis ist noch nicht aktiv)


so, aber nun zum Programm selber:
  • es wird jetzt in mehreren (4) Schritten gesucht, was es nun endlich ermöglicht restliche die Laufzeit besser einzuschätzen
    - also bei Suchen wird das aktuelle Verzeichnis gezeigt ... aber es geht recht schnell
    - und bei Durchgang 1 bis 3 wird für den Druchgang eine relativ genaue Prozentanzeige geliefert (siehe Statusleiste)
    - und Durchgang 4 (der endgültige Vergleich) kann abgebrochen werden, aber dann liegt nur eine grobe Vergleichsliste vor ... dort können noch ein paar False-True-Meldungen enthalten sein, also Dateien, welche als Gleich gelistet werden, es aber nicht sind
  • es gibt nun auch einen reinen Hashvergleich (MD5)
    und den bekannten direkten und 100%-genauen byteweisen Vergleich.
  • die Dateiliste kann schon wärend der Suche angesehn werden, da die aktuellen Suchergebnise von der Searchengine regelmäig in den TreeView geladen werden.
  • ja und die Anzeige wurde etwas (hoffentlich) übersichtlicher gestaltet
    - nun sind nicht mehr alle Einträge in eine einfachen Liste hintereinander,
    sondern können auch direkt über den Verzeichnispaum parallel betrachtet werden
    - ebenso ist per Doppelklick in die 2 Listen ein Wechsel zum Ort der entsprechenden Datei in der anderen Liste möglich
  • es gibt auch mehrere Arten der Ansicht
    - kompletter Baum mit allen Dateien (auch die "Ungleichen")
    - Verzeichnisbaum mit den "Duplikaten" und nötigen Verzeichnissen
    - Liste aller Duplikate
    - Liste des jeweils ersten Duplikates ... die anderen Duplikate sind ja in der 2. Liste auch sichtbar
    - Liste der Dateien mit Zugriffsproblemen
  • und ich speichere jetzt auch die Fehlercodes, so daß man nun sehn kann, warum auf eine Datei nicht zugegriffen werden konnte
  • beim Klick auf [stop] oder wenn der PC hoffentlich auch, wenn es z.B. in den Standby fährt, schaltet das Programm in einen Pausemodus
  • ja und einfach nicht über den Fenstertitel wundern ... des ist nur 'ne Debug-Statusanzeige für mich
  • !!! selbst wenn "ohne WindowsFileCache" nicht auswählt ist, werden dennoch "etwas" intelligent geregelt vorallem größere Dateien dennoch nicht durch die Cache gejagt ... der Schalter stellt nur um, daß alle Dateien nicht mehr da durchgezwängt werden sollen

ja und ich hoffe/denke mal es läuft mindestens ab Win2K

Ansonsten sollte immernoch recht flott verglichen werden
> z.B. 320 GB in 13.000 Dateien > 450 MB in 460 Dateien doppelt/mehrfach vorhanden > in 3 Minuten auf einer USB-Festplatte
> die alte Version brauchte für knapp 300.000 Dateien á 900 GB etwa 6 Stunden und ich glaub die aktuelle Version war schneller, obwohl ich sie etwas langsamer vermutet hätte ... liegt wohl an der inteligenteren Cache-Verwaltung

[add 11:30] Anhänge getauscht ... irgendwie scheint der Kompiler manchmal die StackGröße von fast 2 MB nicht zu verwenden/zu ignorieren und es kommt zu einem Stacküberlauf ... hab die Lesepuffer also mal umgelagert und laß die 1 MB vom Standard
[add 12:00] bei der letzen Optimierung einer Funktion ging wohl was schief
man konnte den Pausemodus nur noch abbrechen, aber nicht mehr fortsetzen
[edit 01.08. 0:05] Anhänge ersetzt ... siehe nächster Post
[edit 01.08. 20°°] siehe Post #39 [edit] Post #39 kommt später ... ich änder noch schnell etwas
[edit 04.08. 12:20] neue Testversion > siehe Post #39
[edit 04.08. 13:30] kleinen Fehler im Pausemodus des Threads behoben ... man konnte den Thread nun nichtmehr abbrechen
[edit 04.08. 14:00] Synchronisierung Datenbäumchen <> TreeView geändert
[edit] es gibt jetzt nur nich die gezippte EXE ... doppteltest Hochladen ist bei dem UMTS etwas nervig
[edit 07.08. 9:30] neue Version, siehe #42
[edit 28.08. 15:30] neue Version, siehe #43
[edit 28.08. 19:00] Fehlerbehebung, siehe #44
Angehängte Dateien
Dateityp: 7z searchsamefiles_664.7z (455,6 KB, 67x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#36
  Alt 31. Jul 2009, 23:20
anscheinend scheint es zu laufen?
s' hat sich zumindestens noch keiner beschwert
  • kleinere Änderungen ... zu unbedeutend, um sie zu erwähnen,
    aber dennoch im Post #36 neue Versionen hochgeladen
  • mit Icons sieht's jetzt hübscher aus
    wie in der neuen und nie veröffentlichten v2.1 werd' ich aber keine Dateispezifischen Icons mehr anzeigen ... die kleine Satz für alle Dateien gleiche Standardicons muß reichen
  • wie man sieht, ist der schnellere Vergleich via MD5 nicht immer schneller
    (siehe Anhang)

    nach nur 27 Minuten war ein erster Überblick über ~240.000 Dateien á 970 GB verfügbar
    und nach knapp 2 Stunden war dann alles genau verglichen

    man beachte aber, das bei mir
    a) sehr viele Dateien gleich sind
    b) und nicht grad wenige fast ähnlich (unterscheiden sich nur in wenigen defekten Sektoren)
    c) das eines der Laufwerke ist ein etwas langsameres USB-Plättchen
    also d) würde es bei Vielen, mit einer ähnlichen Datenmenge, vermutlich nicht so lange dauern, da efekiv weniger Daten verglichen werden ... siehe oben rechts > Zeit und tatsächlicher Datendurchsatz
  • als nächstes kommt die Behandlung der Checkboxen
    (das der VTV ja nur teilweise geladen wird, muß/will ich ja den Status der Boxen im Vergleichsbaum speichern und da verwalten ... bzw. den Markierungsstatus vom Baum in der Box darstellen),
    ein Popupmenü mit ein/zwei funktionen
    und ein bissl was mit dem Header der TreeView kommt auch noch
Miniaturansicht angehängter Grafiken
sse_381.png  
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#37
  Alt 1. Aug 2009, 07:53
Ich verstehe nicht ganz, wozu die rechte Listview ist? Wie kommen Daten dort rein, damit man doppelte Dateien via "delete selected" löschen kann?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#38
  Alt 1. Aug 2009, 08:14
Dort sind praktisch die Duplikate aufgelistet, welche zur links markierten Datei gehören.
[add] ich werd' aber mal mal einen Dummyeintrag ala "keine Datei selektiert" bzw. "keine Duplikate vorhanden" dort reinmachen, wenn die Liste leer ist.[/add]

Im linken Baum/Liste werden entweder alle Duplikate "full dup list", nur das jeweils erste Dupplikat "dup list", alle Duplikate im Verzeichnisbum "dup tree", alle Dateien "full tree" (hier sieht man über die Icons was mehrfach vorkommt und wo sich was versteckt) oder die Dateien mit Zugriffsproblemen.

Das mit dem Löschen selbst ist aber noch nicht drin - das bau ich gleich mit ein, aber darum ist der Button auch noch deaktiviert.
Wie gesagt, ich mach grad alles von Grund auf neu und das dauert ein Weilchen.

Aber du hast mich eben auf 'ne Idee gebracht ... 'ne Ansicht, wo man mal nur die Markierten sieht, wäre bestimmt nicht schlecht.

Und durch 'nen Doppelklick auf einen Namen da rechts kannst man dann auch links in der Liste zu der Datei springen
und wenn ich die Verwaltung der CheckBoxen fertig hab, dann kann man auch endlich links oder rechts die Auswahl ändern, welche dann auch beachtet wird (aktuell tut der TreeView nur so als ob)

[add]
in der alten Version gab es nur diese Ansicht (siehe Bild 2), aber jetzt versuch mal,
obwohl man es zu einem gewissen Grad sortieren lassen konnte (leider nur nach dem ersten Eintag der Dupplicate),
rauszubekommen wie es sonst noch in diesem Verzeichnis aussieht ... nahezu unmöglich
Miniaturansicht angehängter Grafiken
unbenannt_709.png   unbenannt2_185.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#39
  Alt 4. Aug 2009, 11:31
mal einige Testanfragen:
  • wie läßt sich der Speicherdialog für die Programmoptionen bediehen?
    > siehe http://www.delphipraxis.net/internal...064535#1064535
    > er kann jetzt auch Pfeiltasten, Scrollrad und per Doppelklick auf einen Button eine Direktwahl
  • und das Wichtigste:
    irgendwie hab ich ein Leck/Schleife?
    vorallem wenn man schnell zwischen Pause und Resume umstellt, bleibt der Suchthread anscheinend im Pausemodus hängen
    > Stop ist aber noch möglich ... nur Resume nicht mehr (leider ist das mit dem Debuggen etwas schwer, da der Fehler sich nicht zuverlässig reproduzieren läßt)

    wenn man z.B. schnell und oft [stop] und dann [nein] wählt,
    also auf [stop] drücken, dann [nein] wählen und das öfters hintereinander (oder abwechselnd S und N dücken)

    kann noch jemand diesen Fehler reproduzieren?
  • wenn der PC in in den StandBy oder Ruhezustand wechselt, sollte sich das Programm automatisch in den Pausemodus versetzen und beim Runterfahren natürlich abschalten.
    beim Ruhezustand und Standby weiß ich aber noch nicht, ob es recht zuverlässig funktioniert (vorallem in Vista und Seven kommt ja die nötige Message nicht immer im Programm an )
  • das Popupmenü in den Trees ist jetzt drin, aber noch Vieles ist deaktivert,
    dennoch sollte sich dort zumindestens nun der Speicherpfad ändern lassen
  • im rechten Tree für die Duplikate wird jetzt ein Hinweis angezeigt ... ich hoffe es ist so verständlicher, wofür diese Liste gut sein soll
  • außerdem wurde die SearchEngine überarbeitet und sollte nun nochmal etwas flotter arbeiten
  • Testversionen in Post #35
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#40
  Alt 4. Aug 2009, 12:58
Hi,

dein Programm hat ein Problem ab NT6.x .Da sind die Dateien im WinSxS Ordner gespeichert und als Hardlinks in die Zielordner (C:\Windows;C:\Programme etc) gemappt, somit sind die Dateien nicht doppelt, obwohl dein Programm sie als doppelt auflistet. Du musst also noch ne Prüfung einbauen ob es Hardlinks sind oder nicht.
André
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz