Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
PhysicalFilesWatcher Konstruktoren überprüfen nun das root Argument und die Beziehung zwischen root und FileSystemWatcher.Path. Ungültige Kombinationen, die zur Bauzeit zuvor akzeptiert wurden, lösen jetzt eine Ausnahme aus.
Eingeführt in Version
.NET 11 Vorschau 4
Bisheriges Verhalten
Zuvor speicherten die PhysicalFilesWatcher-Konstruktoren das bereitgestellte root ohne Validierung oder Normalisierung. Ein null oder anderweitig ungültiger Stamm kann zur Erstellungszeit akzeptiert werden und während eines späteren Watcher-Vorgangs fehlschlagen.
Die Konstruktoren akzeptierten auch ein FileSystemWatcher, dessen nichtleeres Path in keinem Zusammenhang mit root stand. Eine solche Überwachungsinstanz konnte in der Regel keine Änderungen melden, die für das konfigurierte Stammverzeichnis relevant waren, aber diese Abweichung führte nicht dazu, dass der Konstruktor eine Ausnahme auslöste.
Die folgende Konstruktion war z. B. erfolgreich:
string root = Path.Combine(Path.GetTempPath(), "root");
string unrelatedPath = Path.Combine(Path.GetTempPath(), "unrelated");
Directory.CreateDirectory(root);
Directory.CreateDirectory(unrelatedPath);
using var fileSystemWatcher = new FileSystemWatcher(unrelatedPath);
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Neues Verhalten
Ab .NET 11 normalisieren die PhysicalFilesWatcher-Konstruktoren root, indem sie Path.GetFullPath() aufrufen, und lehnen ungültige Eingaben bei der Konstruktion ab:
- Wenn
rootnullist, löst der Konstruktor ArgumentNullException aus. - Wenn
rootnicht in einen vollständigen Pfad konvertiert werden kann, gibt der Konstruktor die entsprechende Ausnahme vonPath.GetFullPath(). - Wenn
FileSystemWatcher.Pathnicht leer ist und in keiner Beziehung zurootsteht, wirft der Konstruktor ArgumentException.
FileSystemWatcher.Path ist gültig, wenn es leer ist, gleich root, ein Vorgänger von root, oder ein Nachfolger von root. Im vorherigen Beispiel löst der Konstruktor nun ArgumentException aus, weil unrelatedPath weder ein Vorfahre noch ein Nachfahre von root ist.
Ein stammverzeichnis, das noch nicht vorhanden ist, bleibt gültig. Die Dateiüberwachung wird erst durchgeführt, wenn das Stammverzeichnis erstellt wurde.
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
PhysicalFilesWatcher unterstützt jetzt Stämme, die nicht vorhanden sind, wenn der Watcher erstellt wird. Dies erfordert eine Normalisierung des Stamms und die Koordination eines bereitgestellten FileSystemWatcher mit diesem Stamm.
Ein FileSystemWatcher, das ein anderes Verzeichnis überwacht, kann für das konfigurierte Stammverzeichnis nicht zuverlässig Benachrichtigungen bereitstellen. Die Ablehnung dieser ungültigen Kombination bereits beim Erstellen verhindert, dass ein Watcher in einer Konfiguration erstellt wird, die generell nicht funktionierte. Die Überprüfung des Stamms führt auch dazu, dass ungültige Pfade während eines späteren Überwachungsvorgangs sofort fehlschlagen. Weitere Informationen finden Sie unter dotnet/runtime#126411.
Empfohlene Maßnahme
Übergeben Sie einen gültigen Pfad ungleich Null als root.
Wenn Sie ein FileSystemWatcher mit einem nicht leeren Path angeben, konfigurieren Sie seinen Pfad so, dass er root entspricht, ein übergeordneter Pfad von root oder ein untergeordneter Pfad von root ist. Beispiel:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Wenn das Stammverzeichnis noch nicht vorhanden ist, ist ein leerer FileSystemWatcher.Path Wert gültig:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Der Watcher beginnt mit der Überwachung, nachdem das Stammverzeichnis erstellt wurde.