Pregunta

Estoy usando ReadDirectoryChangesW para espiar una carpeta, si yo estoy copiando un archivo grande a la carpeta, puedo recibir varios mensajes de FILE_ACTION_MODIFIED, parece cada vez ventanas escribe una gran parte del archivo, se obtiene el archivo modificado notificación para cada tiempo. He intentado utilizar la API CreateFile para comprobar si el archivo se puede abrir por AP o no, pero en algún momento, algunos de los archivos siempre están bloqueados por otro AP, por ejemplo, si va a abrir el Outlook, el PST se actualizará, pero mi punto de acceso puede 't acceder a ella, tenemos que empezar de instantáneas para abrirlo. Así que mi pregunta es, ¿cómo saber que un archivo se copia termine?

¿Fue útil?

Solución

Esta es una solución de una naturaleza muy hacky, pero en una situación muy peludo se puede ejecutar un bucle de sondeo para comprobar el tamaño (o fecha de modificación) del archivo. Si no cambia durante un tiempo, puede algo asumir con seguridad que el archivo de la copia esté terminada.

EDIT: Esta no es la solución óptima en el caso medio, pero hay que considerar que en el caso de la OP mejores soluciones que se hayan descartado por las restricciones del problema. Piense en esto antes de pensar en downvoting.

Otros consejos

Cuando la encuesta en el tamaño del archivo, no utilice _stat/_stat64. En su lugar, abra el archivo cada vez que necesite llamar y _filelengthi64 para obtener el tamaño del archivo. El tamaño del archivo que se devuelve por _stat64 no se actualiza en tiempo real por el sistema operativo Windows. También por ser capaz de abrir el archivo, que está probando a ver que se han completado las operaciones de copia de largo.

Windows proporciona una API para controlar el contenido de directorios de actualización. Puede utilizar el evento creado para detectar nuevo archivo, pero tenga en cuenta que este evento de disparo no necesariamente significa que el archivo es liberado todavía.

C ++ nativo especificaciones y código de ejemplo:

http://msdn.microsoft.com/ en-us / library / aa365261 (VS.85) .aspx

.net:

http://msdn.microsoft.com/en- es / library / system.io.filesystemwatcher.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top