Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
PhysicalFilesWatcher Os construtores agora validam o root argumento e a relação entre root e FileSystemWatcher.Path. Combinações inválidas que antes eram aceites durante a construção agora geram uma exceção.
Versão introduzida
.NET 11 Prévia 4
Comportamento anterior
Anteriormente, os PhysicalFilesWatcher construtores armazenavam o fornecido root sem validação ou normalização. Uma raiz null ou de outra forma inválida pode ser aceite no momento da construção e falhar numa operação posterior do watcher.
Os construtores também aceitavam um FileSystemWatcher cujo Path não vazio não tinha relação com root. Um observador assim geralmente não podia reportar alterações relevantes para a raiz configurada, mas o desajuste não causava o lançamento do construtor.
Por exemplo, a seguinte construção teve sucesso:
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);
Novo comportamento
A partir do .NET 11, os PhysicalFilesWatcher construtores normalizam root chamando Path.GetFullPath() e rejeitando entradas inválidas em tempo de construção:
- Se
rooténull, o construtor lança ArgumentNullException. - Se
rootnão puder ser convertido para um caminho completo, o construtor propaga a exceção aplicável dePath.GetFullPath(). - Se
FileSystemWatcher.Pathfor não vazio e não estiver relacionado comroot, o construtor lança ArgumentException.
FileSystemWatcher.Path é válido quando é vazio, igual a root, um antepassado de root, ou um descendente de root. No exemplo anterior, a construção agora gera ArgumentException porque unrelatedPath não é nem ascendente nem descendente de root.
Um diretório raiz que ainda não existe mantém-se válido. A monitorização de ficheiros é adiada até que o diretório raiz seja criado.
Tipo de mudança disruptiva
Esta mudança é uma mudança comportamental.
Motivo da mudança
PhysicalFilesWatcher Agora suporta raízes que não existem quando o Watcher é construído. Isto requer a normalização da raiz e a coordenação de um FileSystemWatcher fornecido com essa raiz.
Um FileSystemWatcher que monitoriza um diretório não relacionado não consegue produzir notificações de forma fiável para a raiz configurada. Rejeitar esta combinação inválida no momento da construção impede que um observador seja criado numa configuração que geralmente não funcionava. A validação da raiz também faz com que caminhos inválidos falhem imediatamente, em vez de durante uma operação de observador posterior. Para mais informações, consulte dotnet/runtime#126411.
Ação recomendada
Passe um caminho válido e não nulo como root.
Quando fornecer um(a) FileSystemWatcher com um(a) Path não vazio(a), configure o respetivo caminho para ser igual a root, um ancestral de root ou um descendente de root. Por exemplo:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Se o diretório raiz ainda não existir, um vazio FileSystemWatcher.Path é válido:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
O observador começa a monitorizar após a criação do diretório raiz.