2011-08-03 9 views
25

tengo una estructura de carpetas:¿Cuál es la forma más fácil de asegurarse de que la carpeta exista antes de hacer un File.Move?

C: \ Temp [completamente vacío]

y tengo un archivo que quiero mover a

C: \ Temp \ Carpeta1 \ MiArchivo.txt

Si realizo un File.Move, me aparecerá un error que dice que esta carpeta no existe.

¿Hay algún método C# que va a crear todas las carpetas hasta ese momento por lo que:

C: \ Temp \ Carpeta1 \

?

+0

no debe almacenar datos en la temperatura. Mejor utilizar alguna carpeta AppData del usuario. – Karsten

Respuesta

7
If Directory.Exists("somedir") 

Ver here para obtener más información.

Para crear un directorio si no existe

Directory.CreateDirectory("path of dir"); 

Se va a crear todos los directorios y subdirectorios, ver here

3

Puede usar Directory.CreateDirectory() para eso. Aparentemente, crea todos los directorios en la ruta.

Tenga en cuenta que, entre el momento en que crea el directorio y la hora en que mueve el archivo, alguien podría haber eliminado el directorio. Por lo tanto, no hay forma de estar absolutamente seguro de que el directorio realmente existirá cuando intente mover el archivo. Una posible excepción es usar filesystem transactions.

+0

Su comentario sobre no poder estar absolutamente seguro es incorrecto. Puede verificar claramente si existe antes de hacer algo con la carpeta. Teniendo en cuenta que la aplicación se ejecuta más rápido que un humano puede eliminar una carpeta, y siempre que compruebe si existe la carpeta, la carpeta siempre estará allí. –

+4

Técnicamente está en lo cierto, hay una condición de carrera entre el cheque y el movimiento. En la práctica, esto no es algo de lo que me preocupe en mi aplicación, ya que sería casi imposible de encontrar. –

+6

@Rahmound, ¿y si el otro no es humano, sino alguna otra aplicación? Por ejemplo, uno que periódicamente limpia el directorio Temp? – svick

Cuestiones relacionadas