Esto es más una pregunta acerca de cuál es la mejor práctica en la implementación de esto.C# - Predecir eventos del sistema de archivos en la carpeta eliminar
Tengo un FileSystemWatcher
que me debe informar acerca de los cambios del usuario en los archivos y carpetas. También se vigilan los subdires. En el mismo directorio, mi programa también a veces cambia. No deseo que FileSystemWatcher
detecte eventos en estos cambios de programa.
Mi primera implementación fue una lista donde puedo agregar eventos esperados. Cuando recibo un evento del sistema de archivos, reviso la lista y la ignoro si está allí. Esto no suena muy robusto pero parece funcionar.
Ahora me detectaron el problema real:
D: se mira por el FileSystemWatcher
.
Tengo dos carpetas como esa: D: \ carpeta1 \ carpeta2
Ahora quiero eliminar la carpeta1 (con la carpeta2 en ella) con mi aplicación. Así que puse D: \ folder1 en mi lista de eliminación. Luego llamo a algo así como Directory.Delete(@"D:\folder1", true)
. Ahora noto que la carpeta1 no se puede eliminar (por qué nunca) sobre una excepción. Elimino la entrada de eliminación de mi lista, pero la carpeta2 ya se eliminó y obtengo su FileSystemEvent. Entonces obtengo un evento FileSystem para D: \ folder1 \ folder2. Mi programa piensa que ahora el usuario ha eliminado esta carpeta y está haciendo las cosas mal.
que tenían algunas ideas ahora:
1.) eliminar de forma recursiva la carpeta mediante la supresión de todos los archivos y todas las carpetas por sí mismo. Con esto obtengo para cada subcarpeta y archivo una entrada de lista propia. Ya lo implementé, pero es muy, muy, muy lento.
2.) ¿Tal vez hay una mejor manera de tener filtros inteligentes en el FileSystemWatcher
para hacer que mi lista quede obsoleta?
3.) Tal vez solo se pueda eliminar un árbol de directorios si es posible eliminar todo. Entonces, si falla, todavía tengo todo y si no, todo se elimina. Esta parece ser la solución más elegante para mí, pero no tengo idea de si esto es posible.
4.) ¿Es posible bloquear exclusivamente todos los archivos y carpetas de mi software? Si esto fue bien, debería ser posible borrar todo con un comando de eliminación o de alguna manera así?
También estoy abierto para otras soluciones adicionales.
Editar 1 para que sea más claro:
Sólo quiero "ver" las acciones del usuario en una carpeta. Si manipulo cosas de mi programa aquí, no quiero ver estos eventos.
Con mi implementación, obtengo eventos para subcarpetas si una carpeta está bloqueada y no se puede eliminar.
No es tan fácil de explicar en inglés porque no soy un hablante nativo de inglés;).
Edición 2:
5.) Tal vez es posible filtrar en FileSystemWatcher
todos los eventos de un proceso definido?
¿Dónde está la parte en su pregunta sobre cómo predecir las cosas? –
la lista sobre la que estaba escribiendo es una predicción porque contiene los eventos esperados que deberían venir más tarde de FileSystemWatcher. Funciona así: 1.) recordar en la lista 2.) manipular archivos/carpeta 3.) ignorar eventos con la lista – fpdragon
En serio, no estoy obteniendo esto. ¿Qué evento esperas? ¿Qué eventos estás recibiendo en su lugar? ¿Qué excepciones estás obteniendo? Por favor actualice sus preguntas con estos puntos. –