2010-02-09 12 views
7

Target OS: Win2003File.Delete() atómica bajo .NET

Como se ha escrito en otras de las preguntas sobre la operación de archivos atomicidad, Win32 simplemente no se diseñó para las transacciones. Todavía me pregunto si la eliminación de archivos podría ser no atómica. Después de todo, se puede eliminar o no. ¿O puede un archivo permanecer en cualquier otro estado intermedio en el sistema de archivos NTFS causado por un bloqueo del sistema u otra cosa durante la eliminación?

Respuesta

12

NTFS es un journaled file system. Un diario es básicamente equivalente a un registro de transacciones en una base de datos. Garantizará la coherencia e integridad de las estructuras del sistema de archivos, como lo hace una base de datos para sus tablas. Mientras que File.Delete no tiene ningún código transaccional en el nivel alto, NTFS mantiene la integridad transaccional en el nivel del sistema de archivos. Esto puede no ser cierto para otros controladores del sistema de archivos.

5

vieja pregunta, pero si pudiera añadir a la respuesta de @ Mehdrad, desde un punto de vista ligeramente diferente ...

En Windows, borrar un archivo menudo no es aún completamente sincrónica, y no es ni siquiera una operación única. En ese sentido, definitivamente no es atómico.

Si observa herramientas como process monitor o mira la documentación de MSFT para escribir un controlador del sistema de archivos, verá que eliminar un archivo en Windows es un proceso de varios pasos. Primero necesita un control para el archivo. Luego establece su disposición a "eliminado". Esto pone el archivo en un estado donde tiene un "eliminar pendiente". El archivo ni siquiera se eliminará de la vista hasta que se cierre el último identificador. Cuando un archivo se encuentra en este estado, los nuevos intentos de abrir el archivo fallarán con STATUS_DELETE_PENDING. Este estado es más una cuestión de tiempo de ejecución: si desconectó o reinició, los archivos no permanecerán en ese estado.

Por lo tanto, puede o no ser relevante para la forma en que usa las eliminaciones, pero es importante tener en cuenta que en Windows no será necesario aplicar una eliminación de inmediato y bajo el acceso simultáneo puede bloquear más solicitudes de llegar al archivo.

+0

Para aclarar: como se explicó, el proceso de tiempo de ejecución para eliminar un archivo no es atómico ya que consta de varios pasos. Sin embargo, la acción real dentro del sistema de archivos (NTFS) _is_ atomic, por lo tanto, una eliminación se realiza físicamente como un todo o no se realiza en absoluto. – mafu

+0

@mafutrct - No estoy de acuerdo con su evaluación. Como mencioné, borrar un archivo en NT es un proceso de varios pasos y se puede observar que no se completó hasta que se descartó el último identificador del archivo. – asveikau

+1

Sí, pero los cambios físicos en el sistema de archivos (a diferencia de los pasos de cambio virtual en la RAM que usted explicó) actúan atómicos, si entiendo esto correctamente. Es decir, no importa cuando en el proceso de eliminación en NTFS interrumpe el sistema, el estado será coherente: el archivo se eliminará por completo o no se eliminará del todo. Creo que esto es importante, ya que si no fuera el caso, el proceso de eliminación de un archivo debería manejarse de manera muy diferente en el código de usuario. Sin embargo, "atómico" es quizás un término un tanto engañoso para esa idea. – mafu

Cuestiones relacionadas