PhysicalFilesWatcher valida il percorso radice e i percorsi di FileSystemWatcher

PhysicalFilesWatcher i costruttori convalidano ora l'argomento root e la relazione tra root e FileSystemWatcher.Path. Le combinazioni non valide accettate in precedenza in fase di costruzione ora generano un'eccezione.

Versione introdotta

.NET 11 Preview 4

Comportamento precedente

In precedenza, i costruttori PhysicalFilesWatcher memorizzavano il root fornito senza validazione o normalizzazione. Una radice null o comunque non valida potrebbe essere accettata al momento della costruzione e causare un errore durante una successiva operazione del watcher.

I costruttori accettavano anche un FileSystemWatcher il cui Path non vuoto non era correlato a root. Un osservatore di questo tipo in genere non poteva segnalare modifiche rilevanti per la root configurata, ma la mancata corrispondenza non ha fatto sì che il costruttore generasse un'eccezione.

Ad esempio, la costruzione seguente ha avuto esito positivo:

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

Nuovo comportamento

A partire da .NET 11, i PhysicalFilesWatcher costruttori normalizzano root chiamando Path.GetFullPath() e rifiutano input non validi in fase di costruzione:

  • Se root è null, il costruttore genera ArgumentNullException.
  • Se root non è possibile convertire in un percorso completo, il costruttore propaga l'eccezione applicabile da Path.GetFullPath().
  • Se FileSystemWatcher.Path non è vuoto e non è correlato a root, il costruttore genera ArgumentException.

FileSystemWatcher.Path è valido quando è vuoto, uguale a root, un predecessore di rooto un discendente di root. Nell'esempio precedente, la costruzione genera ora ArgumentException perché unrelatedPath non è né un antenato né un discendente di root.

Una directory radice che non esiste ancora rimane valida. Il controllo dei file viene posticipato fino alla creazione della radice.

Tipo di modifica che causa un'interruzione

Questa modifica è una modifica funzionale.

Motivo della modifica

PhysicalFilesWatcher supporta ora radici che non esistono quando viene costruito il watcher. Ciò richiede la normalizzazione della radice e del coordinamento di un oggetto fornito FileSystemWatcher con tale radice.

Un FileSystemWatcher oggetto che monitora una directory non correlata non può produrre in modo affidabile notifiche per la radice configurata. Il rifiuto di questa combinazione non valida in fase di costruzione impedisce la creazione di un watcher in una configurazione che in genere non funzionava. La validazione del percorso radice fa inoltre sì che i percorsi non validi falliscano immediatamente, anziché in seguito durante un'operazione del watcher. Per altre informazioni, vedere dotnet/runtime#126411.

Fornire un percorso valido e non nullo come root.

Quando si specifica un FileSystemWatcher con un Path non vuoto, configurarne il percorso affinché sia uguale a, antenato di o discendente di root. Per esempio:

string root = Path.GetFullPath(configuredRoot);

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

Se la directory radice non esiste ancora, un valore vuoto FileSystemWatcher.Path è valido:

string root = Path.GetFullPath(configuredRoot);

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

Il watcher inizia il monitoraggio dopo la creazione della directory radice.

Le API interessate