Hay muchas publicaciones en Internet sobre la función de API ReadDirectoryChangesW que faltan archivos cuando hay mucha actividad de archivos. La mayoría culpa a la velocidad a la que se llama el bucle de función ReadDirectoryChangesW. Esta es una suposición incorrecta. La mejor explicación que he visto es en el siguiente post, el comentario el lunes 14 de abril de, 2008 2:15:27 PMCómo mantener ReadDirectoryChangesW de cambios de archivos faltantes
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/
El resumen es que los informes la función de ReadDirectoryChangesW archivo cambia cuando salen de la cola de grabación de archivos retrospectivos, no como se agregan. Y si se agregan demasiados antes de comprometerse, pierde aviso en algunos de ellos. Puede ver esto con su implementación, si solo escribe un programa para generar más de 1000 archivos en un directorio muy rápido. Simplemente cuente cuántos avisos de eventos de archivos recibe y verá que hay momentos en que no los recibirá todos.
La pregunta es, ¿alguien ha encontrado un método confiable para usar la función ReadDirectoryChangesW sin tener que vaciar el volumen cada vez? Esto no está permitido si el usuario no es un administrador y también puede tomar algún tiempo para completar.
Esto funcionaría durante aproximadamente el 99% del tiempo. ¿Qué sucede si un archivo en otro directorio (diferente del que tiene muchos cambios de archivos) es el que se omite? Deberías escanear el directorio en busca de cambios, pero te pierdes el cambio de un solo archivo en otro. –
La clase FileSystemWatcher es una forma .NET de ajustar ReadDirectoryChangesW, por lo que no, eso no ayuda. – Garen
Mi respuesta fue más acerca de detectar el # de eventos dentro de un período de tiempo para desencadenar la solución para ReadDirectoryChangesW. – hova