PhysicalFilesWatcher ověřuje kořenové cesty a cesty FileSystemWatcher.

PhysicalFilesWatcher konstruktory nyní ověřují root argument a vztah mezi root a FileSystemWatcher.Path. Neplatné kombinace, které byly dříve akceptovány při vytvoření, nyní vyvolávají výjimku.

Verze byla představena

.NET 11 Preview 4

Předchozí chování

Konstruktory PhysicalFilesWatcher dříve ukládaly poskytnuté root bez ověření či normalizace. Při vytvoření mohl být přijat null nebo jinak neplatný kořen a selhat až při pozdější operaci watcheru.

Konstruktory také akceptovaly FileSystemWatcher, jehož neprázdný Path nesouvisel s root. Takový sledovací proces obecně nemohl hlásit změny související s nakonfigurovaným kořenem, ale neshoda nezpůsobila vyvolání konstruktoru.

Například následující konstrukce proběhla úspěšně:

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);

Nové chování

Počínaje verzí .NET 11 konstruktory PhysicalFilesWatcher normalizují root voláním Path.GetFullPath() a při vytváření instance odmítají neplatné vstupy:

  • Pokud root je null, konstruktor vyvolá ArgumentNullException.
  • Pokud root nelze převést na úplnou cestu, konstruktor rozšíří příslušnou výjimku z Path.GetFullPath().
  • Pokud FileSystemWatcher.Path je neprázdný a nesouvisí s root, konstruktor vyvolá ArgumentException.

FileSystemWatcher.Path je platný, pokud je prázdný, je roven root, je předkem root nebo potomkem root. V předchozím příkladu nyní konstrukce vyvolává ArgumentException , protože unrelatedPath není předchůdcem ani potomkem root.

Kořenový adresář, který ještě neexistuje, zůstane platný. Sledování souborů se odloží, dokud se nevytvořil kořenový adresář.

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

PhysicalFilesWatcher nyní podporuje kořenové adresáře, které v době vytvoření watcheru neexistují. To vyžaduje normalizaci kořene a koordinaci zadaného FileSystemWatcher s tímto kořenem.

A FileSystemWatcher , která monitoruje nesouvisející adresář, nemůže spolehlivě vytvářet oznámení pro nakonfigurovaný kořenový adresář. Odmítnutím této neplatné kombinace v době výstavby zabráníte vytvoření sledovacího nástroje v konfiguraci, která obecně nefungovala. Ověření kořenového adresáře také způsobí, že neplatné cesty selžou okamžitě místo během pozdější operace sledovacího procesu. Další informace najdete v tématu dotnet/runtime#126411.

Předejte nenulovou, platnou cestu jako root.

Když zadáte neprázdný Path pro FileSystemWatcher, nakonfigurujte jeho cestu tak, aby byla stejná jako root, nadřazená vůči root nebo podřazená vůči root. Příklady:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Pokud kořenový adresář ještě neexistuje, je platný i prázdný FileSystemWatcher.Path:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Sledovací proces začne monitorovat po vytvoření kořenového adresáře.

Ovlivněná rozhraní API