Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Konstruktory PhysicalFilesWatcher sprawdzają teraz poprawność argumentu root oraz zależność między root a FileSystemWatcher.Path. Nieprawidłowe kombinacje, które zostały wcześniej zaakceptowane w czasie budowy, teraz zgłaszają wyjątek.
Wersja wprowadzona
.NET 11 (wersja zapoznawcza 4)
Poprzednie zachowanie
PhysicalFilesWatcher Wcześniej konstruktory przechowywały dostarczone root bez walidacji lub normalizacji. Podczas tworzenia można było zaakceptować element root null lub inny nieprawidłowy root, co prowadziło do niepowodzenia podczas późniejszej operacji watchera.
Konstruktory akceptowały również FileSystemWatcher, którego niepuste Path nie było związane z root. Taki obserwator zazwyczaj nie mógł zgłaszać zmian istotnych dla skonfigurowanego katalogu głównego, ale ta niezgodność nie spowodowała, że konstruktor zgłosił wyjątek.
Na przykład następująca konstrukcja zakończyła się pomyślnie:
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);
Nowe zachowanie
Począwszy od platformy .NET 11 konstruktory PhysicalFilesWatcher normalizują root przez wywołanie Path.GetFullPath() i odrzucają nieprawidłowe dane wejściowe podczas tworzenia obiektu:
- Jeśli
rootparametr manullwartość , konstruktor zgłasza wartość ArgumentNullException. - Jeśli
rootnie można przekonwertować na pełną ścieżkę, konstruktor propaguje odpowiedni wyjątek zPath.GetFullPath(). - Jeśli
FileSystemWatcher.Pathnie jest pusty i nie jest powiązany zroot, konstruktor zgłasza wyjątek ArgumentException.
FileSystemWatcher.Path jest prawidłowy, gdy jest pusty, równy root, jest elementem nadrzędnym względem root lub elementem podrzędnym względem root. W poprzednim przykładzie konstruktor zgłasza teraz wyjątek ArgumentException, ponieważ unrelatedPath nie jest ani przodkiem, ani potomkiem root.
Katalog główny, który jeszcze nie istnieje, pozostaje prawidłowy. Oglądanie plików jest odroczone do momentu utworzenia katalogu głównego.
Typ zmiany przełamującej
Ta zmiana jest zmianą behawioralną.
Przyczyna zmiany
PhysicalFilesWatcher obsługuje teraz katalogi główne, które nie istnieją w momencie utworzenia obserwatora. Wymaga to normalizacji korzenia i skoordynowania dostarczonego FileSystemWatcher z tym korzeniem.
Element FileSystemWatcher monitorujący niepowiązany katalog nie może niezawodnie tworzyć powiadomień dla skonfigurowanego katalogu głównego. Odrzucenie tej nieprawidłowej kombinacji w czasie budowy uniemożliwia tworzenie obserwatora w konfiguracji, która zwykle nie działała. Walidacja katalogu głównego powoduje również, że nieprawidłowe ścieżki są odrzucane natychmiast, a nie dopiero podczas późniejszego działania mechanizmu obserwującego. Aby uzyskać więcej informacji, zobacz dotnet/runtime#126411.
Zalecana akcja
Przekaż niepustą, prawidłową ścieżkę jako root.
Jeśli podajesz element FileSystemWatcher z niepustym elementem Path, skonfiguruj jego ścieżkę tak, aby była taka sama jak ścieżka root, nadrzędna względem niej lub podrzędna względem niej. Przykład:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Jeśli katalog główny jeszcze nie istnieje, pusty FileSystemWatcher.Path jest prawidłowy:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Obserwator rozpoczyna monitorowanie po utworzeniu katalogu głównego.