Verzeichnissuche

Proggen.org - Lernprojekt: Duplikatefinder
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Verzeichnissuche

Beitrag von Xin » Di Jun 08, 2010 10:15 am

Dieser Thread richtet sich dann vorrangig an Bebu mit der Verzeichnissuche.

Unter welchem Betriebsystem arbeitest Du?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3091
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Verzeichnissuche

Beitrag von cloidnerux » Di Jun 08, 2010 1:35 pm

Verzeichnissuche habe ich schon einmal gelöst, zwar mit Boost aber es funktioniert.
Ich habe mit einem Directory Itertor das Höchste Verzeichnis durchsucht, alle Dateien gehasht und alle Ordner auf einen Stack/Liste/Queue gepackt, dann ein Belibiges Element vom Container genommen, und diesen wieder Durchsucht, alle Dateien Gehasht und alle Orndern auf dne Container und in einer Schleife immer so weiter.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Mi Jun 09, 2010 1:37 am

Ich arbeite auf Ubuntu 10.04 und kann notfalls noch ein Windows Vista auspacken.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Mi Jun 09, 2010 3:13 pm

Bebu hat geschrieben:Ich arbeite auf Ubuntu 10.04 und kann notfalls noch ein Windows Vista auspacken.
Wenn Du beides auspacken kannst, um so besser.

Auch für Dich gilt hier, dass es ein Interfaces geben sollte, mit denen Du Verzeichnisse und Filehandles repräsentierst und die Du an cloidnerux übergeben kannst. Wenn Du einen Vorschlag für eine FileHandle-Klasse hast, trag die doch bitte mal ins Wiki ein, damit cloidnerux und ich da mal mit Dir drüber gucken können.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Do Jun 10, 2010 2:31 am

Xin hat geschrieben: Auch für Dich gilt hier, dass es ein Interfaces geben sollte, mit denen Du Verzeichnisse und Filehandles repräsentierst und die Du an cloidnerux übergeben kannst. Wenn Du einen Vorschlag für eine FileHandle-Klasse hast, trag die doch bitte mal ins Wiki ein, damit cloidnerux und ich da mal mit Dir drüber gucken können.
OK, gehen wir das ganze mal etwas langsamer an.

Fangen wir doch mal damit an, welche Daten bei mir eingehen werden. Bekomme ich nur Verzeichnisse zur Verarbeitung, oder werden sämtliche Dateien und Verzeichnisse über meine Klasse geleitet? Einzelne Dateien könnte man ja auch vorher aussieben und direkt ans Hashing weiterleiten.

Soll unser Programm einen Möglichkeit enthalten, nur bis in eine bestimmte "Verzeichnistiefe" zu suchen?

Welche Daten sollen alle abrufbar sein? Reicht es aus, im Interface z. B. einen Vector-Container und einen entsprechenden Iterator zur Verfügung zu stellen, oder sollen auch gleich die Anzahl der Verzeichnisse, Dateigröße und Dateirechte miterfasst werden?

Die Entscheidung gegen Boost ist gefallen?

Welche Betriebssystem wollen wir alles unterstützen? Nur die drei Großen, wie Windows, Mac und Linux, oder auch irgendwelche Exoten?

Mir fällt bestimmt noch was ein, aber das ist für den Anfang ja schon mal ein bisschen was.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Do Jun 10, 2010 8:24 am

Bebu hat geschrieben:Fangen wir doch mal damit an, welche Daten bei mir eingehen werden. Bekomme ich nur Verzeichnisse zur Verarbeitung, oder werden sämtliche Dateien und Verzeichnisse über meine Klasse geleitet? Einzelne Dateien könnte man ja auch vorher aussieben und direkt ans Hashing weiterleiten.
So gehört sich das... jedes Programm bekommt schließlich eine Eingabe und produziert eine Ausgabe.
Du bekommst als Eingabe einen String (geh mal von 'char const *' aus), der den absoluten Pfad zu einer Datei oder zu einem Verzeichnis darstellt. Ob es eine Datei oder Verzeichnis ist, bekommst Du nicht gesagt.
Anschließend forderst Du für die Datei die Hashs an und übergibst diese mit dem Dateinamen an ein Objekt, dass die Hash zwischenspeichert.
Bebu hat geschrieben:Soll unser Programm einen Möglichkeit enthalten, nur bis in eine bestimmte "Verzeichnistiefe" zu suchen?
Nein, da sehe ich derzeit keinen Nutzen drin.
Bebu hat geschrieben:Welche Daten sollen alle abrufbar sein? Reicht es aus, im Interface z. B. einen Vector-Container und einen entsprechenden Iterator zur Verfügung zu stellen, oder sollen auch gleich die Anzahl der Verzeichnisse, Dateigröße und Dateirechte miterfasst werden?
Sofern Du die Dateigröße bereits weißt, könntest Du diese gleich mitübergeben.
Wenn Du keine Rechte hast, auf die Datei zuzugreifen, brauchst Du keinen Hash zu bilden, sondern meldest die Datei als nicht zugreifbar an die Datenhaltung.
Bebu hat geschrieben:Die Entscheidung gegen Boost ist gefallen?
Ja, Boost kaut und hier ein das Problem vor, wobei ja eigentlich saubere Lösungen für das Problem gefunden werden sollen.
Außerdem ist es eine zusätzliche Abhängigkeit, die nicht erforderlich ist.
Bebu hat geschrieben:Welche Betriebssystem wollen wir alles unterstützen? Nur die drei Großen, wie Windows, Mac und Linux, oder auch irgendwelche Exoten?
Aktuell kannst Du von den drei großen ausgehen.
Bebu hat geschrieben:Mir fällt bestimmt noch was ein, aber das ist für den Anfang ja schon mal ein bisschen was.
Das sind in jedem Fall aber schonmal einige wichtige Fragen gewesen. :-)


PS: Ich habe das hier genannte mal in ein Wiki-Dokument gepackt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Do Jun 10, 2010 1:10 pm

Tja, bisher klingt das ja schon mal nicht schlecht, ein paar Fragen drängen sich mir trotzdem wieder auf. Wäre es nicht einfacher, den Hash direkt beim Erzeugen des Hashobjektes zu generieren? Also praktisch im Konstruktor?

Wird die Datenhaltung ein Objektinterface haben, oder lediglich Funktionen die ich aufrufen kann? So eine Art spezialisiertem SQLite-Wrapper? Mir spukt schon eine Grundidee im Kopf rum, mir fehlen noch die Details der anderen Interfaces, schließlich laufen in diesem Modul ziemlich viele Fäden zusammen.

Achja, Verzeichnisssuche lässt sich wohl kaum völlig plattformunabhängig schreiben. Lösen wir das über Präprozessorerschalter oder soll der Code dann je nach plattform von C-Make erzeugt werden?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Do Jun 10, 2010 1:40 pm

Bebu hat geschrieben:Tja, bisher klingt das ja schon mal nicht schlecht, ein paar Fragen drängen sich mir trotzdem wieder auf. Wäre es nicht einfacher, den Hash direkt beim Erzeugen des Hashobjektes zu generieren? Also praktisch im Konstruktor?
Schrieb ich nicht bereits, dass das Hashobjekt mit dem Dateinamen konstruiert werden sollte?
Bebu hat geschrieben:Wird die Datenhaltung ein Objektinterface haben, oder lediglich Funktionen die ich aufrufen kann? So eine Art spezialisiertem SQLite-Wrapper? Mir spukt schon eine Grundidee im Kopf rum, mir fehlen noch die Details der anderen Interfaces, schließlich laufen in diesem Modul ziemlich viele Fäden zusammen.
Ich sehe die Datenhaltung schon als spezialisiertes Objekt, das über ein Interface Daten an SQLite (oder etwas anderes) abgibt.
Bebu hat geschrieben:Achja, Verzeichnisssuche lässt sich wohl kaum völlig plattformunabhängig schreiben. Lösen wir das über Präprozessorerschalter oder soll der Code dann je nach plattform von C-Make erzeugt werden?
Da ist Kerli gefragt, ob CMake da Möglichkeiten anbietet.
Ansonsten stelle ich mir directoryindex.h und directoryindex/windows.cpp und directoryindex/posix.cpp vor, wobei CMake sich für das richtige entscheiden muss, bzw. in directoryindex.cpp ein Präprozessorschalter die jeweiligen Unterschiede included.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3091
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Verzeichnissuche

Beitrag von cloidnerux » Do Jun 10, 2010 4:53 pm

Ich will mich hier auch noch zu Wort melden:
Wir sollten eine möglichkeit einbauen, die verzeichnissuche als Thread laufen zu lassen, um z.B bei der Integration in eine GUI, eine neuindexierung im Hintergrund laufen zu lassen.
Dann würde ich eine eher Dynamische Lösung vorschalgen, also du Implentierst eine Klasse, die im Konstruktor den Pfad zum obersten Ordner erhält.
Dann noch eine Start() und Stop() Funktion, um das ganze als Thread laufen zu lassen, um z.B mehrere Laufwerke gleichzeitg zu Durchsuchen.
Dann implemnetierst du einen Eventhandler OnFound(const char* path), der bei jedem Treffer aufgerufen wird. Im Eventhandler kann mann jetzt die Datei Hashen oder sie in eine DB abspeichern. Das Hashen hatte ich in meiner Demo so geplant, das es eine Klasse FileInfo gab, die den Pfad der Datei erhielt und die entsprechenden Inforamtionen sammelte. So kann man die Informationen etwas Zentraler handhaben.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Do Jun 10, 2010 5:08 pm

cloidnerux hat geschrieben:Ich will mich hier auch noch zu Wort melden:
Wir sollten eine möglichkeit einbauen, die verzeichnissuche als Thread laufen zu lassen, um z.B bei der Integration in eine GUI, eine neuindexierung im Hintergrund laufen zu lassen.
Finde ich grundsätzlich gut, damit die GUI weiterhin reagieren, bzw. aktuelle Status-Informationen anzeigen kann.
cloidnerux hat geschrieben:Dann würde ich eine eher Dynamische Lösung vorschalgen, also du Implentierst eine Klasse, die im Konstruktor den Pfad zum obersten Ordner erhält.
Dann noch eine Start() und Stop() Funktion, um das ganze als Thread laufen zu lassen, um z.B mehrere Laufwerke gleichzeitg zu Durchsuchen.
Die Idee ist auch gut, aber hier wird es erstmal schwierig herauszufinden, was unterschiedliche Laufwerke sind. Wenn 20 Pfade gleichzeitig auf einem Laufwerk indiziert werden, dann verlangsamt das den Vorgang massiv.

Derartiges würde ich also auf eine spätere Version verschieben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten