2009-04-02 12 views
10

Estoy tratando de escribir una utilidad que permita mover archivos en Windows, y cuando encuentre un archivo en uso, configurará ese archivo para moverlo al reiniciar.Windows: Sobrescribir archivo en uso

Parece que MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) es la decisión correcta para esto, sin embargo no puedo averiguar qué código de error que estoy buscando desde GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx) para ver que el archivo estaba en uso.

Quiero que la utilidad falle cuando hay un problema de permisos real. ¿Hay alguna forma de diferenciar un error de sobrescritura de "no se puede escribir" y un error de sobrescritura en uso?

Además, si tengo los archivos que estoy moviendo en la carpeta temporal del usuario, ¿serán eliminados antes del cambio de nombre diferido?

+0

gran pregunta +1 ;-) – Raj

Respuesta

10

Primero tiene que llamar al CreateFile para ver si el archivo está en uso.

para ver si el archivo está en uso:

Si recibe un identificador de archivo válido entonces usted sabe que el archivo no tiene permisos de uso compartido en conflicto con un proceso que ya tiene este archivo abierto.

Si especifica que no se permite el acceso compartido (0 al parámetro dwShareMode de la llamada CreateFile), no obtendrá un manejador de archivo si cualquier otro proceso está utilizando actualmente ese archivo de alguna manera. GetLastError en este caso sería volver: ERROR_SHARING_VIOLATION (32)


Para ver si hay un problema de seguridad con acceso al archivo:

Para ver si hay un problema de permisos para acceder a ese archivo, la llamada CreateFile se también falla pero con un GetLastError diferente. Obtendrá: ERROR_ACCESS_DENIED (5)

Cuestiones relacionadas