2012-01-06 18 views
6

Estoy intentando hacer un seguimiento de los archivos que los usuarios y otras aplicaciones copian. El FileSystemWatch solo tiene eventos para Modificado, Creado, Eliminado, Dispuesto, Error y Renombrado. No activa un evento cuando se accede a un archivo mediante la función de copia o donde se está copiando el nuevo archivo.C# Seguimiento de archivos copiados

¿Hay algún método para controlar el evento/función de copia de Windows?

+0

¿Se puede ver en la instancia del portapapeles? Solo un pensamiento. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –

+0

¿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. –

+0

¿Por qué estás tratando de hacer esto? – RQDQ

Respuesta

4

No conozco ninguna forma de usar C#.

Puede hacerlo si está dispuesto a escribir un File System Filter Driver. [Territorio Definitivamente experto, ya que no hay margen para la corrupción de archivos y/o derribar su sistema] intercepta controladores de filtro

Un sistema de archivos peticiones dirigidas a un sistema de archivos u otro controlador de filtro de sistema de archivos. Al interceptar la solicitud antes de que alcance su objetivo deseado, el controlador del filtro puede extender o reemplazar la funcionalidad provista por el objetivo original de la solicitud . Los ejemplos de controladores de filtro del sistema de archivos incluyen filtros de antivirus , agentes de copia de seguridad y productos de cifrado. Para desarrollar los archivos y los controladores de filtro del sistema de archivos, utilice el Kit IFS (Archivo instalable ), que se proporciona con el Kit de controladores de Windows (WDK).

+1

El controlador de filtro puede rastrear las operaciones de lectura y escritura por separado, pero no puede establecer el enlace entre dos. No es posible identificar la copia de una manera definitiva. –

1

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.
0

Puede utilizar Auditing file and folder access característica de Windows que escribe una entrada de registro y se puede iniciar programas de instalación que cuando se produce un evento tan

0

No puedo pensar en ninguna buena manera.

Para cada archivo recién creado, debe comprobar si hay un duplicado exacto (quizás con un nombre diferente) en cualquier parte del sistema de archivos. Obviamente podrías hacer esta fuerza bruta, ¡pero la solución sería muy poco elegante, lenta y frágil!

Cuestiones relacionadas