unlocker tiene thisismyfile ruta que programa para especificado eliminar dispositivo descargar desbloquear dejan control archivos archivo acceso .net winapi file locking

.net - tiene - ¿Cómo copio un archivo o carpeta que está bloqueado bajo Windows programáticamente?



unlocker (3)

¿Cuáles son las llamadas API para copiar un archivo que está actualmente bloqueado? Espero poder usar .Net, pero las llamadas de Win32 también estarían bien.

Por favor, siéntase libre de compartir la misma funcionalidad en Unix o en cualquier otro sistema operativo.


Dependiendo de qué haya bloqueado exactamente su archivo, puede hacer System.IO.File.Copy (), o crear un System.IO.BinaryReader y un System.IO.BinaryWriter y crear manualmente una copia del archivo leyendo fragmentos de el archivo bloqueado y escribirlos en un nuevo archivo. He visto situaciones en las que un método era posible pero el otro no, en función de por qué el archivo estaba bloqueado.

Esta es la respuesta de "todos .NET".


Puede utilizar la API VSS (Servicio de instantáneas de volumen, no Visual SourceSafe) para este fin. Si bien es potente, no es exactamente una API fácil de usar: la descripción general del procesamiento de una copia de seguridad en VSS le dará una idea de lo que se trata.

A pesar de que es una API relativamente reciente, el soporte de .NET para VSS es prácticamente inexcusable (inexcusable). No puede llamar a la mayoría de la API a través de Interop, y las funciones del archivo de Framework no funcionarán con el espacio de nombres del kernel que VSS usa para exponer los archivos capturados. Como extra, hay horrendos problemas de 32/64 bits y XP-vs-Vista, lo que hace que la implementación también sea emocionante (¡el equipo responsable de Microsoft debería estar realmente orgulloso!)

De todos modos, el proyecto AlphaVSS tiene la intención de llevar la funcionalidad completa de VSS a .NET, y se ve extremadamente prometedor, a pesar de que todavía está en etapa pre-beta. Sin embargo, podría hacer el truco para usted, y es de código abierto (Managed C ++).

Para un buen ejemplo de cómo hacer cosas usando Win32, vea HoboCopy . La utilidad es bastante útil por sí misma, y ​​la fuente completa de C ++ también está disponible en la página del proyecto SourceForge .


Casi lo mismo que mi respuesta a otra pregunta :

Si está en Win32, la forma oficial de hacerlo es marcarlo para que se mueva al reiniciar, y pedirle al usuario que se reinicie. Para marcar el archivo que se MOVEFILE_DELAY_UNTIL_REBOOT al reiniciar, use MoveFileEx con el indicador MOVEFILE_DELAY_UNTIL_REBOOT .

Es la misma función, solo que esta vez no pasas NULL como destino.