2017-03-24 1 views
2

Wenn ein FileSystemWatcher erstellen, haben wir die Möglichkeit, auszuwählen, welche NotifyFilters zu achten. aber mein Verständnis gibt es mehr NotifyFilters, die das FileSystemWatcher.Changed Ereignis, wie NotifyFilters.LastWrite oder NotifyFilters.Attributes auslösen könnte.Welche NotifyFilter ausgelöst FileSystemWatcher.Changed?

Code:

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = Path.GetDirectoryName(PATH); 
watcher.Filter = Path.GetFileName(PATH); 
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.FileName | NotifyFilters.Security | 
         NotifyFilters.CreationTime | NotifyFilters.Attributes | NotifyFilters.LastAccess | NotifyFilters.DirectoryName; 
watcher.Changed += OnFileSystemWatcher_Changed; 
watcher.Deleted += OnFileSystemWatcher_Deleted; 
watcher.Created += OnFileSystemWatcher_Created; 
watcher.Renamed += OnFileSystemWatcher_Renamed; 

private void OnFileSystemWatcher_Changed(object sender, FileSystemEventArgs e) 
{ 
    // Do Stuff 
} 

Problem: In meinem Ereignishandler für den FileSystemWatcher.Changed Fall ist es eine Möglichkeit, zu bestimmen, welche NotifyFilter das Ereignis ausgelöst hat?

Versuch: Ich dachte über gerade ein neues FileSystemWatcher für jede Art von NotifyFilter zu schaffen, aber das scheint nicht wie eine sehr effiziente Nutzung von Speicher. Ich hatte gehofft, dass es eine sauberere Methode geben würde.

Antwort

2

Nein, es gibt keine Möglichkeit, dies zu erfahren, weil darunter liegende Fenster api, die durch FileSystemWatcher genannt wird, solche Informationen nicht liefert. Api die aufgerufen wird, ist ReadDirectoryChangesW und es gibt Ergebnis in FILE_NOTIFY_INFORMATION Struktur mit den folgenden Feldern:

typedef struct _FILE_NOTIFY_INFORMATION { 
    DWORD NextEntryOffset; 
    DWORD Action; 
    DWORD FileNameLength; 
    WCHAR FileName[1]; 
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; 

Wo Aktion erstellt wird \ geändert \ gelöscht \ umbenannt. Wie Sie sehen - keine Informationen darüber, welcher Filter die Änderung ausgelöst hat.

Verwandte Themen