Directory.CreateDirectory hace exactamente lo que casi siempre quieres: crea la carpeta y todas las que falten por el camino, y si ya existe, no pasa nada.
También te puede interesar
namespace, sin class Program, sin Main. Los ejemplos usan instrucciones de nivel superior, disponibles desde C# 9: el compilador genera esa estructura por ti. Y desde .NET 10 un archivo suelto se ejecuta directamente con dotnet run archivo.cs, sin crear un proyecto. El código de siempre, con su static void Main, sigue funcionando igual. Tampoco hacen falta los using System;, System.IO y compañía: los proyectos modernos los incluyen de forma implícita.Crear
var d = Directory.CreateDirectory(Path.Combine("datos", "2026", "octubre"));
Console.WriteLine($"existe: {d.Exists}");
Directory.CreateDirectory(Path.Combine("datos", "2026", "octubre")); // otra vezsalidacreado: True | existe: True otra vez: sin error
Tres niveles de una vez, aunque no existiera ninguno. Y llamarlo sobre una carpeta que ya existe no lanza excepción, así que no hace falta comprobar antes con Directory.Exists, como hacía la versión anterior de esta página. Se puede llamar sin más al principio del programa.
Devuelve un DirectoryInfo con la información de la carpeta, por si la necesitas: su ruta completa, su fecha de creación o los archivos que contiene.
Una carpeta temporal
string tmp = Directory.CreateTempSubdirectory("decodigo-").FullName;
// ... trabajar ...
Directory.Delete(tmp, recursive: true);salidatemporal: True
Desde .NET 7. Crea una carpeta con un nombre que no choca con nada dentro de la carpeta temporal del sistema. Borrarla al terminar es cosa tuya.
Cuándo sí falla
| Si… | Excepción |
|---|---|
| ya existe un archivo con ese nombre | IOException |
| no tienes permiso para crear ahí | UnauthorizedAccessException |
| la ruta tiene caracteres no válidos | ArgumentException o IOException, según el sistema |
C:\RutaArchivos\ o D:\dev\proyCs\, que solo existían en un ordenador. Aquí se usan rutas relativas y Path.Combine, que pone el separador correcto en cada sistema: el mismo código funciona en Windows, Linux y macOS.Todo el código se ejecutó con .NET 10 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.