Bien, para comenzar esto es estrictamente para Windows y prefiero usar C++ sobre .NET pero no me opongo a boost::filesystem
, aunque si se puede evitar en favor de la API de Windows directa, preferiría eso.¿Cómo determinar cuándo se realizan los archivos copiando para su posterior procesamiento?
Ahora el escenario es una aplicación en otra máquina que no puedo cambiar va a crear archivos en un directorio particular en la máquina que necesito para hacer copias de seguridad y hacer un procesamiento adicional. Actualmente he hecho una pequeña aplicación que se sentará y escuchará las notificaciones de cambio en un directorio de destino usando FindFirstChangeNotification
y FindNextChangeNotification
API de Windows.
El problema es que aunque puedo recibir notificaciones cuando se crean nuevos archivos en el directorio, modificaciones, cambios de tamaño, etc. solo se notifica una vez y no me dice específicamente qué archivos. También miré ReadDirectoryChangesW
, pero es la misma historia, excepto que puedo obtener información un poco más específica.
Ahora puedo escanear el directorio e intentar adquirir bloqueos o abrir los archivos para determinar qué cambió específicamente desde la última notificación y si están disponibles para su uso posterior, pero en el caso de copiar un archivo grande he encontrado esto no es lo suficientemente bueno ya que el archivo no estará listo para ser manipulado y no recibiré ninguna otra notificación después del primero, así no habrá forma de saber cuándo se ha hecho realmente la copia, a menos que después de la primera notificación trate de adquirir continuamente se bloquea hasta que tenga éxito.
La única otra cosa que puedo pensar que sería menos hacker sería tener algún tipo de final del archivo testigo pero ya no tengo control sobre la aplicación de la creación de los archivos, en primer lugar yo no' Veo cómo haré eso y todavía no es ideal.
¿Alguna sugerencia?
¿qué tal un programa de respaldo? –