watcher example c# filesystemwatcher

c# - example - FileSystemWatcher para ver la ruta UNC



filesystemwatcher example c# (5)

No hay escasez de preguntas sobre este tema, pero todavía estoy teniendo problemas. Aquí está mi situación. Tengo un servicio que necesito para ver una ruta que se especifica en el archivo de configuración. Funciona muy bien cuando usé un disco local.

Sin embargo, cuando lo cambio a algo como //server2/secondary/temp/watch_folder el servicio no se inicia. El error en el registro es

El nombre del directorio // server2 / secondary / temp / watch_folder no es válido.

Si copio eso directamente en el Explorador de Windows, la carpeta se abre bien. Si tomo mi código y lo pego en una aplicación anterior de Winforms, funciona bien. He intentado todas las cuentas de "Iniciar sesión como". Lo configuré para usar la cuenta de administrador, pero aún no tengo dados.

Aquí está mi código:

_watcher = new FileSystemWatcher(); _watcher.Path = ConfigurationManager.AppSettings["WatchFolder"]; _watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; _watcher.Filter = "*.txt"; _watcher.Created += new FileSystemEventHandler(OnCreated); _watcher.Error += new ErrorEventHandler(OnError); _watcher.EnableRaisingEvents = true;

¿Algunas ideas? Estoy en una pérdida y en este punto creo que lo he estado mirando demasiado tiempo. Sinceramente aprecio cualquier ayuda.

Gracias nick

EDITAR Aquí está la excepción:

El servicio no se puede iniciar. System.ArgumentException: el nombre de directorio / server2 / Secondary / temp / watch_folder no es válido.
en System.IO.FileSystemWatcher.set_Path (valor de cadena)
en FileWatcher.FileWatcher.Watch ()
en FileWatcher.FileWatcher.OnStart (String [] args)
en System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (estado del objeto)


Acabo de intentar esto:

var _watcher = new FileSystemWatcher(); _watcher.Path = @"//10.31.2.221/shared/"; _watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; _watcher.Filter = "*.txt"; _watcher.Created += new FileSystemEventHandler((x, y) =>Console.WriteLine("Created")); _watcher.Error += new ErrorEventHandler( (x, y) =>Console.WriteLine("Error")); _watcher.EnableRaisingEvents = true; Console.ReadKey();

Eso funciona sin problemas, sin embargo, repliqué su excepción cuando:

  • El usuario en ejecución no tiene permisos para leer la carpeta remota.
  • La carpeta remota no existe.

Su problema seguramente está relacionado con los permisos, creo que el usuario que está corriendo no tiene los permisos necesarios.

Otra cosa que puedes probar es asignar la carpeta remota a un local.

Ejecuta esto en el cmd:

NET USE Z: //server2/Secondary/temp/watch_folder /user:Domain/UserName Password

Luego en su código:

_watcher.Path = @"Z:/";



Es posible que tengas que tener tu camino como

//server2//Secondary//temp//watch_folder


Es probable que su servicio se esté ejecutando bajo una cuenta de usuario que no tenga permiso para ese recurso compartido. Intente cambiar el servicio de Windows para que se ejecute bajo diferentes credenciales.


También me encontré con este problema. Mi solución fue incluir el nombre de dominio de nuestra compañía en la ruta del servidor:

//servername.company.com/directorytowatch