Autor Beitrag
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 10.02.09 01:15 
Hallo
Hab mal ein Tool zusammengeklöppelt, dass doppelt oder mehrfach vorhandene Dateien sucht und auflistet. Es sucht auf allen oder nur auf einem ausgewählten Laufwerk entweder alle oder nur bestimmte Dateitypen und identifiziert Doubletten ausschließlich über einen MD5-Check. Die Festlegung der Start-Attribute erlauben viele verschiedene Suchläufe und Auswertungen. Eine Kurzanleitung ist im Programm enthalten. Nachdem es nun endlich "fehlerfrei" läuft, kann ich nur sagen. Es ist unglaublich, was sich auf ca. 3 TB an Speicher fressenden Müll ansammelt. Aber: Eine Löschfunktion ist noch nicht eingebaut. Einfach deshalb, weil nicht jede doppelt vorhandene Datei auch gleichzeitig Müll ist. Im Moment noch kann man mit Ergebnisdateien unter ..\Dokumente und Einstellungen\User\Anwendungsdaten\Gemini (oder der englischen Entsprechung) händisch oder per Batch löschen. Aber genau so, wie mit Doppelclick auf eine Zeile die entsprechende Application gestartet werden kann zum Anschauen von beispielsweise JPG- oder BMP-Dateien, kann ich mir hier auch eine gezielte Löschfunktion vorstellen. Vielleicht gibt es da ja von Euch Vorschläge.
Wär schön, wenn ihr es mal antesten könntet.
Gruß Delphi10

Edit: Wieso merkt man einen Bug erst 20min nach dem UpLoad?
Edit: 26.02.09 Ein Bug hat sich noch herausgestellt: Solange Gemini läuft ist das ClipBoard gesperrt. Ich hatte damit herumexperimentiert und leider sind noch Reste mit compiliert worden. Wird aber beim nächsten UpLoad behoben - falls sich überhaupt jemand dafür interessiert...
Edit: Neue Version eingefügt. 01.03.2009
Edit: V1.0.3.7 eingefügt
Edit: V1.0.4.7 eingefügt
Edit: Sorry, war noch ein Bug drin. Nicht tragisch aber ich konnte ihn auch nicht drinlassen
Edit: ScreenShot drangehängt. Wenn Gemini nicht läuft, kann man wenigsten sehen, wie es aussehen müßte
Edit: V1.0.5.7 Jetzt getestet unter Vista, XP und W2000.
Edit: 07.04.2009 08:00 Und noch ein Bug gefixt, es ist zum :autsch:
Edit: V1.0.7.7 Hatte über Ostern Zeit und bin noch mal systematisch alles durchgegangen. Es ist unglaublich, mit welcher Heimtücke man sich selber abschiesst....


Zuletzt bearbeitet von delphi10 am Sa 12.09.09 00:32, insgesamt 19-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 10.02.09 14:59 
Ein paar Hinweise zur Verbesserung:
1. Sowohl MD5- als auch SHA1-Check heranziehen, ggf. GEgenprüfung, ob die Dateien wirklich gleich sind.

2. Vergleich auch auf Remote-Rechnern (Dafür such ich nämlich noch ein Tool)

3. Suchstatus abspeicherbar, um die Wiederaufnahme zu beschleunigen

4. Auch vergleich von Einzelordnern zulassen; manchmal weiß man ja ungefähr schon, wo die Duplikate liegen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 10.02.09 15:48 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ein paar Hinweise zur Verbesserung:
1. Sowohl MD5- als auch SHA1-Check heranziehen, ggf. GEgenprüfung, ob die Dateien wirklich gleich sind.

Dann wirds aber nicht schneller, ne?
Zitat:
2. Vergleich auch auf Remote-Rechnern (Dafür such ich nämlich noch ein Tool)

Hmm, hab zwar Rechner im LAN aber keine echten Remote. Muss mal sehen.
Zitat:
3. Suchstatus abspeicherbar, um die Wiederaufnahme zu beschleunigen
4. Auch vergleich von Einzelordnern zulassen; manchmal weiß man ja ungefähr schon, wo die Duplikate liegen ...

Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

_________________
Salus populi suprema lex esto
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 10.02.09 15:53 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:

Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

Dafür ist die Registry da...

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 10.02.09 17:13 
Naja, wirklich Remote hab ich auch eher selten; aber TCP dazu zu nutzen, die Hashes zu synchronisieren deckt diesen Fall auch gleich ab ...

Zu dem Thema MD5: Brauchst ja ggf. nur für die Dateien mit doppeltem MD5-Hash die SHA1-Summe auch mit zu berechnen; dass es durch diese zusätzliche Berechnung nicht schneller wird, ist klar ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 10.02.09 21:05 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:

Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

Dafür ist die Registry da...

Also mit solchen selbstsicheren Festlegungen bin ich eher vorsichtig. Nicht jeder User hat es besonders gern, wenn jedes Pipi-Tool in der Registry rumschaufelt, ohne dass es darüber Auskunft gibt, was es da treibt. Da Gemini aber keine Install- und DeInstall-Routine benötigt, würden die Einträge, wenn Gemini gelöscht wird, als Müll zurückbleiben. Nicht wirklich das, was ich wollte.

_________________
Salus populi suprema lex esto
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 12.02.09 21:24 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

Was willst du in die Registry schreiben? Eine komplette Liste aller Dateinamen inklusive MD5-Checksummen? Das wäre ja größer als die gesamte aktuelle Registry :shock:

Außerdem erstellst du doch ohnehin schon einen Ordner in den Anwendungsdaten - warum nicht dort reinspeichern?
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Do 12.02.09 21:58 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

Was willst du in die Registry schreiben? Eine komplette Liste aller Dateinamen inklusive MD5-Checksummen? Das wäre ja größer als die gesamte aktuelle Registry :shock:

Hast Du das Programm mal gestartet? Vor einem Suchlauf muss man einige Startparameter auswählen. Diese und ein/zwei Programmstati werden immer aktualisiert in die Registry geschrieben, damit der nächste Programmstart sofort ausgeführt werden kann. Sorry, aber so wie Du schreibst, hast Du den Thread nicht verfolgt. Lies doch mal die Antwort von user profile iconBenBE

Die nächste Version ist fast fertig. Unter anderem:
- Startparameter in der Registry
- SHA1 zusätzlich
- Suchen in den Ergebnisfenstern
- Vergleich in definierten Trees

_________________
Salus populi suprema lex esto
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 13.02.09 17:39 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Eigentlich wollte ich unbedingt irgendwelche Zusatzdateien oder INI's vermeiden, schreib ichs in die Registry-ok?

Was willst du in die Registry schreiben? Eine komplette Liste aller Dateinamen inklusive MD5-Checksummen? Das wäre ja größer als die gesamte aktuelle Registry :shock:

Hast Du das Programm mal gestartet? Vor einem Suchlauf muss man einige Startparameter auswählen. Diese und ein/zwei Programmstati werden immer aktualisiert in die Registry geschrieben, damit der nächste Programmstart sofort ausgeführt werden kann. Sorry, aber so wie Du schreibst, hast Du den Thread nicht verfolgt. Lies doch mal die Antwort von user profile iconBenBE

Also willst du nur den Namen der zuletzt indizierten Datei speichern? Aber irgendwo müssen doch die ganzen früheren MD5s hin, oder entnimmst du die der Logdatei in den Anwendungsdaten? Dann kannst du doch gleich dort auch die Konfigurationsdatei speichern, damit der User nachher nicht an zwei verschiedenen Ordnern den Datenmüll entfernen muss. :idea:
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Fr 13.02.09 20:28 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Also willst du nur den Namen der zuletzt indizierten Datei speichern? Aber irgendwo müssen doch die ganzen früheren MD5s hin, oder entnimmst du die der Logdatei in den Anwendungsdaten? Dann kannst du doch gleich dort auch die Konfigurationsdatei speichern, damit der User nachher nicht an zwei verschiedenen Ordnern den Datenmüll entfernen muss. :idea:

Leider immer noch nicht so richtig. Unter Anwendungsdaten werden lediglich zwei Dateien angelegt:
- Eine Datei enthält alle gefundenen Dateinamen incl. der MD5-Hashes.
- Die zweite Datei enthält alle mehrfach vorhandenen Dateinamen incl. der MD5-Hash.
Im Prinzip sind das nur User-Infodateien, sie werden von Gemini nicht mehr angefasst aber gegebenenfalls überschrieben.
Sonst werden keine weiteren Dateien angelegt. Alle weiter benötigte Startparameter wie:
- Anzeige EIN/AUS
- Alle Laufwerke
- Einzelnes Laufwerk
- Gesuchte Dateiextension
- Letzter Suchbegriff aus der Suche in den Ergebnissen(V.0.7)
werden beim allerersten Programmstart vorbelegt- und bei jedem Programmende aktualisiert in die Registry geschrieben. Somit erleichtern sie jeden weiteren Programmstart, indem sie beim Start gelesen und in die entsprechenden Felder eingesetzt werden. Die unter Anwendungsdaten erzeugten Dateien werden dazu nicht gebraucht. Die nächste Version wird eine Checkbox enthalten mit der man auswählen kann, ob nach dem nächsten Programmende alle erzeugten Daten gelöscht werden sollen. Quasi eine UnInstall-Funktion.
Jetzt müsste eigentlich klar sein, was wo gespeichert wird. TIPP: Einfach mal ausprobieren.

_________________
Salus populi suprema lex esto
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 13.02.09 21:06 
-Weniger geblinke
-Auswahl von 2 oder mehr Verzeichnissen, die Verglichen werden sollen (ähnlich der Suchpfad-Dialoge von Delphi)
-Für einen Speicherort entscheiden. Pack einfach alles ins Application Data, und frag den User beim Beenden ob er das behalten will oder obs weg kann.

Zur Funktion kann ich nix sagen, da das mangels Verzeichnisauswahl nicht Testbar ist für mich.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 13.02.09 21:32 
Hm, ich verstehe immer noch nicht so ganz, wie du dann die Suche fortsetzen willst. Dafür müsstest du doch die bisherigen Ergebnisse speichern - es kann ja sein, dass eine später untersuchte Datei mit einer Datei, die vor der Pausierung analysiert wurde, übereinstimmt. Die einzige Möglichkeit, das zu prüfen, ist das Speichern aller Checksummen. Oder ich stehe gerade vollständig auf dem Schlauch...
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Fr 13.02.09 23:19 
aber das tut er doch....
Garf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 54
Erhaltene Danke: 2


D3Prof, D7PE, TDE
BeitragVerfasst: Sa 14.02.09 10:38 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht gibt es da ja von Euch Vorschläge.

Wenn die Dateien auf der selben NTFS-Partition liegen, wäre eine Alternative zum Löschen das Anlegen von Hardlinks.
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Sa 14.02.09 14:32 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Die einzige Möglichkeit, das zu prüfen, ist das Speichern aller Checksummen. Oder ich stehe gerade vollständig auf dem Schlauch...

Alle ermittelten Checksummen und Pfade stehen bis zum Programmende in
a: ListBox
b: Memo
c: RichEdit
Zutreffendes bitte ankreuzen.
Und ja, es passen mehr als 64KB hinein.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
-Auswahl von 2 oder mehr Verzeichnissen, die Verglichen werden sollen (ähnlich der Suchpfad-Dialoge von Delphi)

Ist in nächsten Version schon drin.
Zitat:
-Für einen Speicherort entscheiden. Pack einfach alles ins Application Data, und frag den User beim Beenden ob er das behalten will oder obs weg kann.

Überleg ich mal. Obwohl das ganze INI-Geraffel gefällt mir nicht. Halte ich nicht für besonders elegant. Alles Löschen auf Knopfdruck ist auch schon in 1.0.0.7 drin. Aber von unterschiedlichen Speicherorten.
Zitat:
Zur Funktion kann ich nix sagen, da das mangels Verzeichnisauswahl nicht Testbar ist für mich.

Das verstehe ich jetzt nicht. Welches Verzeichnis fehlt, das App.Data?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconGarf hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht gibt es da ja von Euch Vorschläge.

Wenn die Dateien auf der selben NTFS-Partition liegen, wäre eine Alternative zum Löschen das Anlegen von Hardlinks.

Ne, leider nicht unbedingt. Es kann global über alle Laufwerke suchen und vergleichen.

_________________
Salus populi suprema lex esto
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 14.02.09 16:21 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Alle ermittelten Checksummen und Pfade stehen bis zum Programmende{...}

Eben.

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Zur Funktion kann ich nix sagen, da das mangels Verzeichnisauswahl nicht Testbar ist für mich.

Das verstehe ich jetzt nicht. Welches Verzeichnis fehlt, das App.Data?

Verzeichnisauswahl. Wenn du schon gerne frech wirst, darf ich das auch:
1. Lesen
2. Denken
3. Schreiben
Was davon hast du nicht gemacht?

Und nochmal zum Thema: Ganzes Laufwerk vergleichen nutzt mir nix. Ohne eine Möglichkeit, die Verzeichnisse auszuwählen (die es ja in der ominösen schon 1.0.0.7 gibt) kann ich nicht testen. Mehr nicht.

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Ne, leider nicht unbedingt. Es kann global über alle Laufwerke suchen und vergleichen.

s.o.: das war nicht die Frage.
Er meint, dass du die Dateien dann nicht löschen sollst, sondern ggf. per Hardlink verbinden.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Garf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 54
Erhaltene Danke: 2


D3Prof, D7PE, TDE
BeitragVerfasst: Sa 14.02.09 17:39 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconGarf hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht gibt es da ja von Euch Vorschläge.

Wenn die Dateien auf der selben NTFS-Partition liegen, wäre eine Alternative zum Löschen das Anlegen von Hardlinks.

Ne, leider nicht unbedingt. Es kann global über alle Laufwerke suchen und vergleichen.

Du siehst doch, ob die Dateien auf der selben Partition liegen. In dem Zusammenhang sollte man auch prüfen, ob die Dateien schon hardlinked sind. Nicht dass dann nur ein Link gelöscht wird und der Speicherplatzgewinn bei Null liegt.
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Sa 14.02.09 18:21 
user profile iconGarf hat folgendes geschrieben Zum zitierten Posting springen:
In dem Zusammenhang sollte man auch prüfen, ob die Dateien schon hardlinked sind. Nicht dass dann nur ein Link gelöscht wird und der Speicherplatzgewinn bei Null liegt.

Ja klar, aber ich habe noch keine Löschfunktion geplant oder eingebaut. Und wenn, wird es nur mit Userbeteiligung/Zustimmung gehen plus Anzeige der Kapazitätsbilanz(<- Dein Stichwort "Speicherplatzgewinn" hat mich drauf gebracht. Gute Idee.)

_________________
Salus populi suprema lex esto
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Sa 14.02.09 18:28 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Verzeichnisauswahl. Wenn du schon gerne frech wirst, darf ich das auch:

Schön, ich werd meinem Avatar immer ähnlicher. Allerdings liegen meine Grenzwerte für Sarkasmus und bitterer Ironie noch zu niedrig. Aber alles andere passt schon.

_________________
Salus populi suprema lex esto
delphi10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 24.02.09 21:33 
Hallo
Habe oben die neue Version hochgeladen. Unter anderem:
* Startparameter aus der Registry verfügbar
* Erweiterte Konfigurationsmöglichkeiten
* Es kann in den Ergebnissen different gesucht werden.
* Wahlweise zusätzlicher SHA1 256bit Check.
* Verzeichnisse zum Vergleich auswählbar
* Aufräumfunktion -wahlweise- bei Programmende.
Nur mit den Remote-Dateien hapert es noch. Ich hab dafür noch kein überzeugendes Konzept.
Wär nett, wenn es jemand testen könnte. Ein Bug ist immer noch drin :?!?:
Gruß Delphi10

_________________
Salus populi suprema lex esto