2011-07-08 16 views

Respuesta

8

El método File.Move se puede utilizar para mover el archivo de una ruta a otra. Este método funciona en todos los volúmenes de disco, y no arroja una excepción si el origen y el destino son los mismos.

No puede usar el método Move para sobrescribir un archivo existente. Si intenta reemplazar un archivo moviendo un archivo del mismo nombre en ese directorio, obtendrá una IOException. Para superar esto, puedes usar la combinación de copiar y borrar métodos

+0

Bien, gracias. Buenos puntos. Pero quiero saber el permiso requerido para hacer estas operaciones. Digamos que para copiar necesito el permiso de 'lectura' y para eliminar necesito el permiso 'Modificar' en el archivo ... etc? Para mover? – Lamps

+0

mover es una combinación de copiar y eliminar, por lo tanto, si tiene permiso para ambas operaciones, no es necesario ningún permiso adicional para la mudanza –

+0

De acuerdo, gracias. Entiendo. Creo que para eliminar y mover operaciones necesitamos modificar el permiso en el archivo. – Lamps

0

No creo que haya ninguna diferencia en cuanto al permiso, pero yo personalmente preferiría utilizar File.Move() ya continuación, usted tiene ambas acciones sucediendo en la misma "transacción". En otras palabras, si algo en movimiento falla, toda la operación falla. Sin embargo, si lo divide en dos pasos (copiar + borrar) si la copia funcionó y la eliminación falló, tendría que invertir la "transacción" (borrar la copia) manualmente.

0

Permiso en transferencia de archivos se comprueba en dos puntos: origen y destino. Entonces, si no tiene lea permiso en la carpeta fuente, o no tiene escriba permiso en el destino, estos métodos arrojarán la excepción AccessDeniedException. En otras palabras, la verificación de permisos es independiente del método en uso.

3

En cuanto al rendimiento, si en un mismo archivo de sistema, mover un archivo es (en términos simplificados) simplemente ajustando algunos registros internos del propio sistema de archivos (posiblemente ajustando algunos nodos en un red/black-tree), sin mover realmente alguna cosa.

Imagine que tiene 180MiB para moverse, y puede escribir en su disco a aproximadamente 30MiB/s. Luego, con copiar/borrar, tarda aproximadamente 6 segundos en terminar. Con un simple movimiento [el mismo sistema de archivos], va tan rápido que quizás ni siquiera te des cuenta.

(Una vez escribí algunos ayudantes de sistema de archivos transaccionales que moverían o copiarían varios archivos, todos o ninguno; para hacer la confirmación lo más rápido posible, primero moví/copié todo en una subcarpeta temporal, y luego la confirmación final movería los datos existentes a otra carpeta (para permitir la reversión), y los nuevos datos hasta el objetivo).