2009-07-17 10 views
0

Ich verwende this Implementierung von ReadDirectoryChangesW, um Änderungen auf dem Desktop zu überwachen. Mein Programm plant, ein kleines Programm auszuführen, wenn eine Datei auf dem Desktop erstellt wird.ReadDirectoryChangesW denkt, dass Verknüpfung direkt nach der Erstellung gelöscht wird

Jetzt das Problem, das ich in renne, ist, wenn ich eine neue Verknüpfung über das Kontextmenü erstellen ReadDirectoryChangesW erhält eine Benachrichtigung sagen, dass die Datei erstellt wurde, aber gleich nachdem eine andere Benachrichtigung erhält die Datei gelöscht wurde. Ich habe seit Windows Vista auf dieses Problem gestoßen.

Wer hat eine Idee, was könnte falsch sein? Gibt es eine andere Funktion, die ich verwenden sollte, um Verzeichnisänderungen zu überwachen, die spezifisch für Vista und 7 sind?

Danke, Krishna

+0

Welcher Dateiname wird hinzugefügt und welcher entfernt? –

+0

Es heißt "New Shortcut.lnk" wurde hinzugefügt, dann nach der Verarbeitung dieser Benachrichtigung bekomme ich eine Nachricht, dass New Shortcut.lnk wurde entfernt –

+0

Warum ist das ein Problem? Sind die Benachrichtigungen nicht korrekt? –

Antwort

0

Ich konnte dieses Problem lösen. Ich weiß immer noch nicht, warum ich all diese seltsamen ReadDirectyChangesW-Events bekomme, aber ich habe mein Endergebnis, also lasse ich diese Frage offen.

Vielen Dank für die Hilfe.

0

Haben Sie irgendwelche Filter definiert: Sie können die Verknüpfung neu erstellt werden (und nicht für Ihre Filter) sehen werden.

Der Explorer neigt dazu, Dinge mit einem festen Namen zu erstellen und sie dann umzubenennen. So wird ReadDirectoryChangesW mehrere Änderungen sehen.

Weitere Gedanken:

Hinweis, der Puffer mit der Änderungsmitteilung können mehrere Benachrichtigungen enthalten, werden alle gelesen.

Was zeigt Process Monitor zur gleichen Zeit?

+0

Entschuldigung, ich denke, ich war etwas unklar. Ich sehe, dass die Verknüpfung erstellt wird, aber nach Erhalt einer Benachrichtigung über die Verknüpfung, die gerade erstellt wird, folgt sofort eine Benachrichtigung, dass die Datei gelöscht wurde, was keinen Sinn ergibt. Diese Implementierung scheint GetQueuedCompletionStatus zu verwenden, um die IO-Anweisung zu erhalten, die aufgetreten sind, geben Sie mir dann einen Zeiger auf ein Objekt, das mir sagen, was für den ReadDirectoryChangesW Aufruf Filter anwenden –

+0

ich diese erweitert habe. Aber am Ende gibt es keinen Ersatz für konventionelles Debugging. Es ist sehr einfach, APIs wie 'ReadDirectoruChnagesW' schlecht und falsch zu verwenden. Glauben Sie nicht, dass der Code Project Code korrekt ist. – Richard

0

Windows macht einige lustige Sachen mit .lnk-Dateien, so dass Sie die Erweiterung .lnk nicht sehen können. Vielleicht wird deshalb die gelöschte Benachrichtigung gesendet, weil Windows selbst die Datei "New Shortcut.lnk", nur die "Neue Verknüpfung" nicht sehen kann. Aber das ist nur eine Theorie.

Also was ich tun würde ist versuchen, es zu umgehen, und ignorieren Sie die dateigelöschte Benachrichtigung, wenn die Datei noch existiert. Angenommen, Sie können herausfinden, dass die .lnk-Datei natürlich noch existiert :)

Verwandte Themen