2009-04-21 20 views
19

Quiero cambiar el nombre de un archivo en un directorio como una transacción atómica. El archivo no cambiará directorios. La ruta se proporciona como una ruta de acceso UNC a un sistema de archivos NTFS, probablemente en Servidor 03 o 08.Atomicidad de File.Move

¿Es File.Move() atomic para estos fines? Al igual que en, ¿se completa con éxito o falla de manera que el archivo original todavía está intacto?

Mi instinto dice que sí, pero quería asegurarme.

+0

aparte, SVN hace uso del hecho de que move es una operación atómica (en la mayoría de los sistemas de archivos) para mantener la integridad durante las actualizaciones/commits. – rmeador

+0

no "atómico" implica que hay más de una operación? ¿cómo se cambia el nombre de este específico a más de una operación? NO es una copia + eliminar. – Lucas

+1

@Lucas: atómico significa que la operación, independientemente de cuántos pasos se realice internamente, siempre sucede al mismo tiempo. No puede ser reemplazado en parte por otro hilo, etc. Este es el significado original "indivisible" de la palabra "atómico", cuyo sentido ha sido desmentido en el caso de los átomos reales por la física moderna ... – rmeador

Respuesta

21

Sí, en NTFS. De here:

Como acotación al margen si está ejecutando bajo NTFS luego presentar las operaciones son atómica a nivel de sistema de archivos. Se producirá un cambio de nombre en una sola operación en lo que respecta a cualquier código superior. El problema que está viendo casi parece ser un problema donde el objeto FileInfo se comparte entre las aplicaciones. Es un objeto MarshalByRef y, por lo tanto, se puede usar en entornos remotos. No sé si esto se aplica a ti.

+0

Uh, pero ¿y si la aplicación .net se ejecuta en FAT o accede a algo en un intercambio de archivos? ¿Dónde está 'File.Rename()' que, como parte de su API, garantiza que el cambio de nombre se realiza atómicamente o arroja una excepción que indica que la atomicidad no se puede lograr? – binki

+1

Ah, aparentemente quiero 'File.Replace()' que arroja una excepción en Windows 98 o FAT (o en cualquier situación donde no puede garantizar la atomicidad, o al menos eso es lo que [los documentos] (https: // msdn. microsoft.com/en-us/library/9d9h163f%28v=vs.110%29.aspx) parecen sugerir). – binki

Cuestiones relacionadas