Verzeichnissuche
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Verzeichnissuche
Dieser Thread richtet sich dann vorrangig an Bebu mit der Verzeichnissuche.
Unter welchem Betriebsystem arbeitest Du?
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Verzeichnissuche
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.
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
quod erat expectandum
- 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
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!
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Verzeichnissuche
Wenn Du beides auspacken kannst, um so besser.Bebu hat geschrieben:Ich arbeite auf Ubuntu 10.04 und kann notfalls noch ein Windows Vista auspacken.
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- 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
OK, gehen wir das ganze mal etwas langsamer an.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.
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!
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Verzeichnissuche
So gehört sich das... jedes Programm bekommt schließlich eine Eingabe und produziert eine Ausgabe.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.
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.
Nein, da sehe ich derzeit keinen Nutzen drin.Bebu hat geschrieben:Soll unser Programm einen Möglichkeit enthalten, nur bis in eine bestimmte "Verzeichnistiefe" zu suchen?
Sofern Du die Dateigröße bereits weißt, könntest Du diese gleich mitübergeben.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?
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.
Ja, Boost kaut und hier ein das Problem vor, wobei ja eigentlich saubere Lösungen für das Problem gefunden werden sollen.Bebu hat geschrieben:Die Entscheidung gegen Boost ist gefallen?
Außerdem ist es eine zusätzliche Abhängigkeit, die nicht erforderlich ist.
Aktuell kannst Du von den drei großen ausgehen.Bebu hat geschrieben:Welche Betriebssystem wollen wir alles unterstützen? Nur die drei Großen, wie Windows, Mac und Linux, oder auch irgendwelche Exoten?
Das sind in jedem Fall aber schonmal einige wichtige Fragen gewesen.Bebu hat geschrieben:Mir fällt bestimmt noch was ein, aber das ist für den Anfang ja schon mal ein bisschen was.
![Smile :-)](./images/smilies/icon_e_smile.gif)
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- 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
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?
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!
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Verzeichnissuche
Schrieb ich nicht bereits, dass das Hashobjekt mit dem Dateinamen konstruiert werden sollte?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?
Ich sehe die Datenhaltung schon als spezialisiertes Objekt, das über ein Interface Daten an SQLite (oder etwas anderes) abgibt.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.
Da ist Kerli gefragt, ob CMake da Möglichkeiten anbietet.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?
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Verzeichnissuche
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.
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
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Verzeichnissuche
Finde ich grundsätzlich gut, damit die GUI weiterhin reagieren, bzw. aktuelle Status-Informationen anzeigen kann.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.
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.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.
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.