2010-02-08 33 views
5

Necesito eliminar un archivo. Ocasionalmente, el archivo puede estar bloqueado, en este caso me gustaría desbloquearlo y eliminarlo de todos modos.¿Cómo desbloquear por la fuerza un archivo en C#?

me he encontrado con dos posibilidades en la investigación hasta el momento.

System.IO.FileStream.Unlock

y

//unlock file 
[DllImport("kernel32.dll", SetLastError = true)] 
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHi);` 

Will cualquiera de estos dos métodos de trabajo? Si es así, podría proporcionar una muestra ya que no he conseguido ninguno de estos para trabajar. O, ¿hay alguna otra manera mejor?

Respuesta

0

Acabé usando la utilidad PSTools, parece que funciona bien.

2

Se debe utilizar la operaciones de archivo retraso, ver How To Move Files That Are Currently in Use ('Mover' incluía eliminar en este contexto).

UnlockFile y los amigos son para las operaciones de bloqueo región de archivos, no para el bloqueo de identificador de archivo, consulte Locking and Unlocking Byte Ranges in Files. Hopefuly no hay ninguna API para abrir un identificador de archivo bloqueado, hasta la inutilidad de bloqueo más o menos useles ...

+2

El bloqueo de archivos de Windows es inútil, es tan defectuoso que los bloqueos añejos se dejan en su lugar todo el tiempo. – earcam

0

Usted podría intentar hacer un P/Invoke llamada a MoveFileEx y MOVEFILE_DELAY_UNTIL_REBOOT:

El sistema de no mueve el archivo hasta que se reinicie el sistema operativo. El sistema mueve el archivo inmediatamente después de ejecutar AUTOCHK, pero antes de crear cualquier archivo de paginación. En consecuencia, este parámetro permite que la función elimine los archivos de paginación de los inicios anteriores.

1

busqué la llamada a System.IO.FileStream.Unlock() en el reflector de Redgates y parece que acaba de llamar a la UnlockFile llamada externa(). Los métodos son uno en el mismo.

Nuestra estrategia actual es poner en un retraso cuando tenemos una expectativa razonable de que el archivo está a punto de ser desbloqueado, lo contrario de error a cabo.

+0

No entendí lo que quería decir ... –

Cuestiones relacionadas