2008-08-19 22 views
17

Ich bin neu in der Windows-Programmierung und ich versuche, über alle Änderungen im Dateisystem informiert zu werden (ähnlich den Informationen, die FileMon von SysInternals anzeigt, aber über eine API). Ist eine FindFirstChangeNotification für jedes (nicht-netzwerkfähige, nicht-standardisierte) Laufwerk meine beste Wahl oder gibt es andere, besser geeignete C/C++ - APIs?Ist FindFirstChangeNotification die beste API für die Benachrichtigung über Dateisystemänderungen unter Windows?

Antwort

22

FindFirstChangeNotification ist in Ordnung, aber für etwas mehr ultimative Macht sollten Sie ReadDirectoryChangesW. verwenden werden (In der Tat ist es auch in der Dokumentation zu empfehlen!)

Es ist nicht einen Funktionszeiger benötigt, es Sie erfordert manuell Dekodieren Sie einen Raw-Puffer, es verwendet Unicode-Dateinamen, aber es ist in der Regel besser und flexibler.

Auf der anderen Seite, wenn Sie wollen, was FileMon tut, sollten Sie wahrscheinlich tun, was FileMon und IFS to create and install a file system filter nicht verwendet.

+0

Ich ging am Ende für ReadDirectoryChangesW und hatte Spaß zu erarbeiten, wie Sie den Puffer in eine Form, die ich zurück zu meinem Java-Code übergeben konnte, konvertieren, aber es tut definitiv, was ich will. –

+0

sry ich habe jetzt versehentlich downvooted ich kann nicht upvote – clyfe

0

Es gibt andere Möglichkeiten, es zu tun, aber die meisten von ihnen beinhalten Aufwand von Ihnen (oder nehmen Sie Leistung von Ihrer App, oder Sie müssen einen Thread blockieren, um sie zu verwenden, usw.). FindFirstChangeNotification ist etwas kompliziert, wenn Sie nicht mit Funktionszeigern usw. vertraut sind, aber es hat den Vorteil, dass das Betriebssystem den Großteil der Arbeit für Sie übernimmt.

-1

Sie können die FileSystemWatcher-Klasse verwenden. Sehr effizient, kann aber nicht mit freigegebenen Netzwerklaufwerken arbeiten.

0

Eigentlich funktioniert FileSystemWatcher perfekt mit freigegebenen Netzlaufwerken. Ich verwende es gerade in einer Anwendung, die unter anderem das Dateisystem auf Änderungen überwacht. (www.tabbles.net).