Está haciendo lo correcto con FileSystemWatcher
. Windows no tiene ningún mecanismo incorporado para informar copias de manera confiable.
Puede enlazar la rutina de copia del sistema operativo, pero esto no le garantizará buenos resultados: las aplicaciones pueden implementar libremente su propia copia abriendo los archivos de origen y destino y copiando los bytes.
El cambio de nombre es diferente porque un cambio de nombre hecho por el sistema operativo no se puede imitar fácilmente por otros medios, por lo que podrá ver todos los cambios de nombre con el FileSystemWatcher
. Tenga en cuenta que moverse entre unidades es más parecido a copiar: no recibirá una notificación con el nombre Renombrado, sino que será Creado y Suprimido.
Así que si realmente necesita realmente a notar un archivo copiado conseguir, mi enfoque propuesto es el siguiente:
- Hook los
CloseFile
llamadas, además de la FileSystemWatcher
.
- Cada vez que se cierra un archivo, podría deberse a que es el origen o el destino de un movimiento de copia/cruce. Verifica su tamaño
- Si encuentra dos archivos cerrados con el mismo tamaño dentro de un período de tiempo razonablemente corto, compare el contenido. Bastante de recursos intensivos, pero la única manera confiable de hacer esto.
¿Se puede ver en la instancia del portapapeles? Solo un pensamiento. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –
¿Qué tan bien puede tolerar el error al rastrear una copia? Probablemente puedas rastrear _most_ copias (por ejemplo, las realizadas a través de Explorer), pero algunas se deslizarán. –
¿Por qué estás tratando de hacer esto? – RQDQ