PhysicalFilesWatcher validerar rot- och FileSystemWatcher-sökvägar

PhysicalFilesWatcher-konstruktorer validerar nu argumentet root och relationen mellan root och FileSystemWatcher.Path. Ogiltiga kombinationer som tidigare accepterades vid byggtiden utlöser nu ett undantag.

Version som introducerades

.NET 11 Förhandsversion 4

Tidigare beteende

Tidigare lagrade konstruktorerna PhysicalFilesWatcher den angivna root utan validering eller normalisering. En null eller en på annat sätt ogiltig rot kunde accepteras vid skapandet och orsaka fel vid en senare övervakningsåtgärd.

Konstruktorerna accepterade också en FileSystemWatcher vars icke-tomma Path inte hade något samband med root. En sådan övervakare kunde vanligtvis inte rapportera ändringar som rör den konfigurerade roten, men diskrepansen ledde inte till att konstruktorn utlöste ett undantag.

Till exempel lyckades följande konstruktion:

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

Nytt beteende

Från och med .NET 11 normaliserar konstruktorerna för PhysicalFilesWatcherroot genom att anropa Path.GetFullPath() och avvisar ogiltiga indata vid konstruktion:

  • Om root är null utlöser konstruktorn ArgumentNullException.
  • Om root inte kan konverteras till en fullständig sökväg vidarebefordrar konstruktorn det tillämpliga undantaget från Path.GetFullPath().
  • Om FileSystemWatcher.Path inte är tom och inte är relaterad till root, kastar konstruktorn ArgumentException.

FileSystemWatcher.Path är giltigt när det är tomt, lika med root, en överordnad till root eller en underordnad till root. I föregående exempel kastar konstruktionen nu ArgumentException, eftersom unrelatedPath varken är en överordnad eller en underordnad till root.

En rotkatalog som ännu inte finns är giltig. Filvisning skjuts upp tills roten har skapats.

Typ av kompatibilitetsbrytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

PhysicalFilesWatcher stöder nu rötter som inte finns när bevakaren är konstruerad. Detta kräver normalisering av roten och samordning av ett angivet FileSystemWatcher med den roten.

En FileSystemWatcher som övervakar en orelaterad katalog kan inte på ett tillförlitligt sätt skapa meddelanden för den konfigurerade roten. Att avvisa denna ogiltiga kombination vid konstruktion förhindrar att en övervakare skapas i en konfiguration som normalt inte fungerar. Validering av roten gör också att ogiltiga sökvägar misslyckas omedelbart i stället för under en senare övervakningsåtgärd. Mer information finns i dotnet/runtime#126411.

Ange en giltig sökväg som root och se till att den inte är null.

Om du anger en FileSystemWatcher med en icke-tom Path, konfigurera dess sökväg så att den är samma som, en överordnad till eller en underordnad till root. Ett exempel:

string root = Path.GetFullPath(configuredRoot);

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

Om rotkatalogen inte finns ännu är ett tomt FileSystemWatcher.Path värde giltigt:

string root = Path.GetFullPath(configuredRoot);

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

Övervakaren börjar bevaka när rotkatalogen har skapats.

Berörda API:er