Entwickler-Ecke

Freeware Projekte - Dateidoubletten finden


delphi10 - Di 10.02.09 01:15
Titel: Dateidoubletten finden
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....


BenBE - 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 ...


delphi10 - 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?


Nersgatt - 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...


BenBE - 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 ;-)


delphi10 - 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.


Yogu - 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 - 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


Yogu - 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 - 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.


Martok - 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.


Yogu - 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 - Fr 13.02.09 23:19

aber das tut er doch....


Garf - Sa 14.02.09 10:38
Titel: Re: Dateidoubletten finden
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 - 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.


Martok - 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.


Garf - 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 - 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.)


delphi10 - 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.


delphi10 - 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


delphi10 - So 01.03.09 18:01

Hallo
Ich habe Fehler gefixt, neue Ideen eingebaut und oben die neue Version V1.0.2.7 eingespielt. Nun sollte es stabil laufen. :flehan:
Würde mich freuen, wenn es mal jemand testet und hier berichtet. Danke.
Gruß Delphi10


delphi10 - Di 03.03.09 17:06

Hallo
Nach den Downloadwerten scheint es tatsächlich so zu sein, dass es niemanden interessiert. Schade.
Ich habe aber trotzdem eine überarbeitete Version (V1.0.3.7) eingefügt - die Hoffnung stirbt zuletzt :zwinker:
Gruß Delphi10


Garf - Mi 04.03.09 17:58

Habe hier WinXP SP3.


delphi10 - Mi 04.03.09 23:12

user profile iconGarf hat folgendes geschrieben Zum zitierten Posting springen:
Habe hier WinXP SP3.
  • Das Formular ist nach dem Start zu klein. Anscheinend benutzt Du Height und Width anstelle von ClientHeight und ClientWidth.
  • Wird das Formular während des Scans in der Größe geändert, stimmt die Größe der Ergebnisliste nicht.
  • Die Listen sind nach der Prüfnummer sortiert. Irgendwie hätte ich eine andere Sortierung erwartet. Bin mir allerdings nicht ganz klar, wie diese aussehen sollte. Entweder nach Größe oder in der alphabetischer Reihenfolge.
  • Die Verzeichnissuche ist ein Verzeichnisvergleich?
  • Das Programm behauptet, es könnten in einem Verzeichnis etwas über 4 MB eingespart werden, obwohl nichts gespart werden kann (weil Hardlinks).

Hallo Garf
Danke für Deinen Test. Die beiden ersten Punkte korrigiere ich, tatsächlich benutze ich Width und Height. Zu der Sortierung wird es kaum Alternativen geben, die Ergebnisliste ist nach der MD5-Checksumme sortiert. Nur die (und SHA1 wahlweise zuschaltbar) wird zum Vergleich herangezogen, Pfade, Datei-Namen-Größe-Datum spielen dabei keine Rolle.
Die obere Liste enthält ja alle gefundenen Dateien nach Suchmuster, der erste Wert ist der MD5-Hash. Damit wird die Liste aufsteigend sortiert (macht ListBox automatisch selber) danach stehen alle gleichen MD5's untereinander und können so einfach blockweise in die Ergebnisliste übertragen werden.
Allerdings überlege ich noch, die Ergebnisliste statt in einem RichEdit in einer ListView darzustellen. Dann kann jeder sortieren, wie er will. Der erste Wert(MD5) muss dann nicht erhalten bleiben, er ist ja nur für den Vergleich wichtig, nicht aber für die Ergebnisdarstellung
Die Verzeichnissuche fragt nach zwei Verzeichnissen, deren Inhalt wie gehabt verglichen werden. Gibt man nur ein Verz. an, so kann in diesem speziellen Verzeichnis gesucht werden, man muss dann nicht das ganze Laufwerk durchforsten wenn man weiß, wo die Duplikate so üblicherweise stecken. Ich denke das ich bis zum WE eine neue Release fertig habe, da ist die Verzeichnissuche etwas eleganter implementiert.
Zugegeben, mit den Hardlinks stehe ich im Moment noch auf Kriegsfuß, das kriege ich aber noch geregelt.
Gruß Delphi10


Garf - Do 05.03.09 15:11

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Allerdings überlege ich noch, die Ergebnisliste statt in einem RichEdit in einer ListView darzustellen. Dann kann jeder sortieren, wie er will.
Das würde mir besser gefallen.

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Die Verzeichnissuche fragt nach zwei Verzeichnissen, deren Inhalt wie gehabt verglichen werden. Gibt man nur ein Verz. an, so kann in diesem speziellen Verzeichnis gesucht werden, man muss dann nicht das ganze Laufwerk durchforsten wenn man weiß, wo die Duplikate so üblicherweise stecken.
Wäre es nicht sinnvoll, eine Combobox ähnlich dem "Suchen in" der Windowssuche zu verwenden, um alle Laufwerke, ein einzelnes Laufwerk oder ein Verzeichnis auszuwählen und das zweite Verzeichnis als Option anzubieten?

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Zugegeben, mit den Hardlinks stehe ich im Moment noch auf Kriegsfuß, das kriege ich aber noch geregelt.
Vielleicht hilft das [http://www.fr-an.de/fragen/v04/02.htm] ein wenig. Unten ist ein Delphi-Tool mit Source.


delphi10 - Di 31.03.09 14:10

Hallo

Oben habe ich die aktuelle Version V1.0.4.7 eingespielt, es dürften jetzt keine Wünsche mehr offen bleiben. HardLinks, Volltextsuche und (fast) alles konfigurierbar.
Diese letzte Version habe ich allerdings noch nicht unter XP und Vista getestet. Zumindest XP sollte aber laufen.
user profile iconGarf kannst Du nochmal testen? Danke.
Klar, alle anderen die möchten natürlich auch.
Gruß Delphi10

Edit: Habe noch einen Bug in der SHA1-Darstellung(nicht Berechnung) repariert. Ist oben und unter [url]http://www.delphi10.de[/url] schon aktualisiert.
Gemini habe ich eben unter Vista getestet. Funktioniert soweit bis auf die automatische Anpassung an die Horizontalauflösung. Da werd ich aber noch mal nacharbeiten, ansonsten einfach nach rechts aufziehen.


delphi10 - Sa 04.04.09 17:57

Eben habe ich oben auf V1.0.5.7 aktualisiert. Gemini läuft jetzt einwandfrei unter Vista, XP und W2000. Vielleicht erbarmt sich doch noch mal jemand von Euch, das Programm zu testen. :bawling:
Gruß Delphi10


Garf - Mo 06.04.09 19:30

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconGarf kannst Du nochmal testen? Danke.

Mache ich. Habe es grade heruntergeladen.

Ging leider zu schnell:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
---------------------------
Anwendungsfehler
---------------------------
Exception ERegistryException in Modul Gemini.exe bei 000281A8.

Fehler beim Holen der Daten für 'Suchbegriffe_löschen'.


---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Gemini
---------------------------
Zugriffsverletzung bei Adresse 74DD0DE8. Lesen von Adresse 74DD0DE8.
---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Gemini
---------------------------
Zugriffsverletzung bei Adresse 74DD0DE8. Lesen von Adresse 74DD0DE8.
---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Error
---------------------------
Runtime error 217 at 0040F4E5
---------------------------
OK   
---------------------------


WinXP SP3, Hauptbenutzer.


delphi10 - Mo 06.04.09 21:43

Hallo Garf
Danke fürs testen. Aber leider hast du wohl noch eine ältere Version erwischt. Den Fehler habe ich schon gefixt. Die aktuelle Version ist die V1.0.5.7 (s. oben).
In dieser neuen Version sind neben anderen eher Schönheitskorrekturen auch diverse Fehler in der Darstellung der ListView behoben. Man kann jetzt die Spalten beliebig untereinander verschieben, ohne dass die Inhalte durcheinander geraten.
Gruß delphi10


Garf - Di 07.04.09 08:33

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Garf
Danke fürs testen. Aber leider hast du wohl noch eine ältere Version erwischt. Den Fehler habe ich schon gefixt. Die aktuelle Version ist die V1.0.5.7 (s. oben).

:( Leider wohl nicht: Version 1.0.5.7, heruntergeladen am 06.04.2009 um 19:29.

Der aktuelle Download ist Version 1.0.5.6?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
---------------------------
Anwendungsfehler
---------------------------
Exception ERegistryException in Modul Gemini.exe bei 00028128.

Fehler beim Holen der Daten für 'Suchbegriffe_löschen'.


---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Gemini
---------------------------
Zugriffsverletzung bei Adresse 74DD0DE8. Lesen von Adresse 74DD0DE8.
---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Gemini
---------------------------
Zugriffsverletzung bei Adresse 74DD0DE8. Lesen von Adresse 74DD0DE8.
---------------------------
OK   
---------------------------



Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Error
---------------------------
Runtime error 217 at 0040F465
---------------------------
OK   
---------------------------


Hat sich der Fehler wieder eingeschlichen?


delphi10 - Di 07.04.09 14:35

Erstmal Danke, dass du dir diese Mühe machst. Der Fehler ist eigentlich nur erklärbar, wenn du keine Schreibrechte auf C:\...\User\Lokale Einstellungen\Anwendungsdaten hast. Dort sollte ein Verzeichnis "Gemini" zu finden sein mit einer SB.TXT - Datei. Ist diese Datei nicht vorhanden, gibt es eine Fehlermeldung und die Datei wird neu angelegt. Die Datei soll dann später die verwendeten Begriffe aus der Textsuche in den Ergebnissen aufnehmen. (Leg doch bitte mal die Datei leer zu Fuß an)
Das mit der Versionsbezeichnung ist ein Krampf. Im Laufe der Entwicklung ist es immer wieder nötig, komplett zu compilieren. Da wird -so wollte ich es- der V.-Zähler hochgezählt. Vor der letzten Compilierung nehme ich die Debug-Einstellungen zurück, setze den Zähler um eins zurück und compiliere gesamt. Wenn man jetzt aber die EXE so verwendet, ist der V.-Zähler NICHT hochgezählt. Das passiert erst, wenn man im Editor das Programm startet, und genau den Schritt hatte ich wohl vergessen.
Hier mal die Dateibehandlung: (Bitte auch das Edit lesen)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
    ComboBox1.Items.Clear;
    Pth2AppData := GetSpecialFolder(Handle,CSIDL_LOCAL_APPDATA);
    Pth2AppData := Pth2AppData + '\' + 'Gemini';
    AssignFile(SearchData,Pth2AppData + '\SB.TXT');
    Reset(SearchData);
    x := IOResult;
    If x = 0 then
    begin
    // Setzt den letzten Suchbegriff wieder ein
      while not EoF(SearchData) do
      begin
        ReadLn(SearchData,Line);
        ComboBox1.Items.Add(Line);
      end;
      CloseFile(SearchData);
    end else
    begin
      Application.messagebox (PChar('Datei-Suchbegriffe nicht gefunden!'+
                                  #13#10+'Wird neu angelegt.'),'Dateifehler',MB_ICONERROR);
      GenDatei;
    end;

Function TForm5.GenDatei: Integer;
Var x : Integer;
begin
  ReWrite(SearchData);
  x := IOResult;
  If x <> 0 then
  ErrorHandling(x) else
  Result := x;
  Reset(SearchData);
  Append(SearchData);
  WriteLn(SearchData,'--');
  CloseFile(SearchData);
end;

Ich habe mit Vista,XP und W2k getestet, aber mit vollen Rechten.
Gruß Delphi10

Edit: Vergiss obiges. Der von dir beschriebene Fehler kommt aus einem vergeblichen Lesezugriff in der Registry. Schau mal, ob dieser Key da ist:
Arbeitsplatz\HKEY_LOCAL_MACHINE\SOFTWARE\Gemini Suchbegriffe_löschen = true/false

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
.
WriteRegBool('Suchbegriffe_löschen',SBC);
.
.
SBC := regist.ReadBool('Suchbegriffe_löschen');
If SBC then
 Form2.CheckBox18.checked := true else
 Form2.CheckBox18.checked := false;


Ich hab nochmal die letzte Version compiliert und oben aktualisiert.