2009-03-30 5 views
0

Ich muss alle Fotos auf einer Festplatte oder einen Ordner für einen Fotoorganisator finden und überwachen. Momentan mache ich das naiv: rekursiv durchqueren, Ordner manuell als indiziert markieren und diesen Vorgang wiederholen, wenn Fotos hinzugefügt oder verschoben werden.Gibt es Best Practices oder Tricks zum Indexieren/Überwachen eines Laufwerks für Dateien?

Das Problem ist mit einem großen genug Ordnerbaum das ist sehr teuer, so suche ich nach Tipps, um dies anders zu machen und/oder Tipps, um es einen niedrigen CPU-Prozess zu halten.

Idealerweise wären Lösungen nicht plattformabhängig.

EDIT: Ich verwende derzeit Xulrunner, könnte aber ein Modul kompilieren plattformspezifische Sachen.
Was ist mit dem ersten Lauf? Gibt es keine Lösung (sogar plattformabhängig), abgesehen davon, dass der gesamte Ordnerbaum manuell durchlaufen wird?

+0

Welches Betriebssystem? –

Antwort

5

Idealerweise wären Lösungen nicht plattformabhängig.

Nicht möglich. Die Win32API hat FindFirstChangeNotification, Linux hat inotify (und andere), Mac OS X hat FSEvents und so weiter. Das sind Dinge, die sehr niedrig sind, und kein Betriebssystem macht dasselbe wie jedes andere Betriebssystem. Wenn Sie etwas plattformübergreifend möchten, müssen Sie eine API mit mehreren Backends finden, die auf den gewünschten Plattformen funktioniert, aber wenn es welche gibt, habe ich sie noch nicht gefunden.

0

Ich kenne keine Möglichkeit, dies auf plattformunabhängige Weise zu tun, aber unter Linux würde ich inotify einwählen, um etwas aufzurufen, wenn eine Datei hinzugefügt oder aktualisiert wird. Sie können sogar inotify-tools verwenden, um ein Skript auszuführen, wenn dies geschieht. Sie müssen also nicht ständig laufen, um all diese Ereignisse zu erfassen, wenn sie selten sind. Lassen Sie das Skript einfach die Datenbank aktualisieren und benachrichtigen Sie optional Ihr Galerie-/Anzeigeprogramm, wenn es ausgeführt wird.

0

Codieren Sie auf .NET? Wenn dies der Fall ist, können Sie stattdessen die Klasse FileSystemWatcher verwenden.

0

Warum nicht ein Filewatcher-Programm verwenden, das Sie über Änderungen in bestimmten Ordnerbäumen informiert?

Wenn Sie Ihre eigenen schreiben möchten, können Sie die FileSystemWatcher-Klasse dazu verwenden.

0

Ein paar Jahre habe ich portiert vor einige Funktionen von Windows-API für Linux wie (FindFirstChangeNotification, FindCloseChangeNotification ...) es hat einige Einschränkungen, aber für das, was Sie brauchen es könnte reichen, bitte schauen Sie sich an: https://github.com/paulorb/FileMonitor

Verwandte Themen