Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
PhysicalFilesWatcher los constructores ahora validan el root argumento y la relación entre root y FileSystemWatcher.Path. Las combinaciones no válidas que antes se aceptaban en el momento de la construcción ahora lanzan una excepción.
Versión introducida
.NET 11 preview 4
Comportamiento anterior
Anteriormente, los constructores PhysicalFilesWatcher almacenaban el root proporcionado sin validarlo ni normalizarlo. Una raíz null o no válida de otro modo podría aceptarse en el momento de la construcción y fallar durante una operación posterior del observador.
Los constructores también aceptaron un FileSystemWatcher cuyo Path no vacío no estaba relacionado con root. Por lo general, un observador de este tipo no podía informar sobre cambios pertinentes para la raíz configurada, pero el desajuste no hizo que el constructor lanzara una excepción.
Por ejemplo, la siguiente construcción tuvo éxito:
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);
Nuevo comportamiento
A partir de .NET 11, los constructores PhysicalFilesWatcher normalizan root llamando a Path.GetFullPath() y rechazan los valores no válidos en el momento de la construcción:
- Si
rootesnull, el constructor produce ArgumentNullException. - Si
rootno se puede convertir en una ruta de acceso completa, el constructor propaga la excepción aplicable dePath.GetFullPath(). - Si
FileSystemWatcher.Pathno está vacío y no está relacionado conroot, el constructor genera ArgumentException.
FileSystemWatcher.Path es válido cuando está vacío, igual a root, un antecesor de rooto un descendiente de root. En el ejemplo anterior, la compilación ahora genera ArgumentException porque unrelatedPath no es ni un ancestro ni un descendiente de root.
Un directorio raíz que aún no existe sigue siendo válido. La supervisión de archivos se aplaza hasta que se crea la raíz.
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
PhysicalFilesWatcher ahora es compatible con directorios raíz que no existen en el momento de crear el observador. Esto requiere la normalización de la raíz y la coordinación de un FileSystemWatcher proporcionado con dicha raíz.
Un FileSystemWatcher que monitoriza un directorio no relacionado no puede generar notificaciones de forma fiable para la raíz configurada. Rechazar esta combinación no válida durante la construcción impide que se cree un observador en una configuración que, por lo general, no funcionaba. La validación de la raíz también hace que las rutas no válidas fallen inmediatamente, en lugar de hacerlo durante una operación posterior del observador. Para obtener más información, consulte dotnet/runtime#126411.
Acción recomendada
Pase una ruta de acceso no nula y válida como root.
Al proporcionar un FileSystemWatcher con un Path no vacío, configure su ruta de acceso para que sea igual a root, o bien antecesora o descendiente de este. Por ejemplo:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
Si el directorio raíz aún no existe, un vacío FileSystemWatcher.Path es válido:
string root = Path.GetFullPath(configuredRoot);
using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
root,
fileSystemWatcher,
pollForChanges: false);
El observador empieza a supervisar después de que se cree el directorio raíz.