2010-06-02 14 views
140

Tengo un pedazo de código aquí que rompe si el directorio no existe:¿Cómo creo un directorio si no existe para crear un archivo?

System.IO.File.WriteAllText(filePath, content); 

En una línea (o unas pocas líneas), ¿es posible comprobar si el directorio líder en el nuevo archivo doesn 't existir y si no, para crearlo antes de crear el nuevo archivo?

Estoy usando .NET 3.5.

+0

duplicado posible de [Si no existe una carpeta, crearlo] (http://stackoverflow.com/questions/9065598/if-a-folder -does-not-exist-create-it) –

Respuesta

275

(new FileInfo(filePath)).Directory.Create() Antes de escribir en el archivo.

O

System.IO.FileInfo file = new System.IO.FileInfo(filePath); 
file.Directory.Create(); // If the directory already exists, this method does nothing. 
System.IO.File.WriteAllText(file.FullName, content); 
+2

Solución elegante, ya que maneja situaciones que requieren la creación de carpetas anidadas. –

-1

Puede usar File.Exists para verificar si el archivo existe y crearlo usando File.Create si es necesario. Asegúrese de verificar si tiene acceso para crear archivos en esa ubicación.

Una vez que esté seguro de que el archivo existe, puede escribir de manera segura. Aunque, como precaución, debes poner tu código en un intento ... atrapar el bloque y atrapar las excepciones que esa función probablemente aumentará si las cosas no salen exactamente como se planeó.

Additional information for basic file I/O concepts.

+0

Inicialmente leí mal su pregunta que quería escribir en un archivo que puede no existir. Sin embargo, los conceptos son esencialmente los mismos para File y Directory IO. – hitec

82

Puede utilizar siguiente código

DirectoryInfo di = Directory.CreateDirectory(path); 
+36

'Directory.CreateDirectory' hace exactamente lo que desea: crea el directorio si aún no existe. ** No es necesario hacer una comprobación explícita primero **. –

+4

Lanza una excepción IOException si 'ruta' es un archivo y no un directorio. https://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx – scaryman

25

Como @hitec dicho, usted tiene que estar seguro de que tiene los permisos correctos, si lo hace, puede utilizar esta línea para asegurar la existencia del directorio:

Directory.CreateDirectory(Path.GetDirectoryName(filePath))

-1

var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));

var file = new FileInfo(filePath);

file.Directory.Create(); Si el directorio ya existe, este método no hace nada.

var sw = new StreamWriter(filePath, true);

sw.WriteLine(Enter your message here);

sw.Close();

Cuestiones relacionadas