Tengo un código aquí que se rompe si el directorio no existe:
System.IO.File.WriteAllText(filePath, content);
En una línea (o algunas líneas), ¿es posible verificar si el directorio que conduce al nuevo archivo no existe y, si no, crearlo antes de crear el nuevo archivo?
Estoy usando .NET 3.5.
Respuestas:
Crear
(new FileInfo(filePath)).Directory.Create()
Antes de escribir en el archivo..... O, si existe, entonces crea (de lo contrario no hagas nada)
fuente
Task.Run(() => );
.Puedes usar el siguiente código
fuente
Directory.CreateDirectory
hace exactamente lo que quieres: crea el directorio si aún no existe. No hay necesidad de hacer una verificación explícita primero .path
es un archivo y no un directorio. msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspxComo dijo @hitec, debe asegurarse de tener los permisos correctos; si lo tiene, puede usar esta línea para garantizar la existencia del directorio:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
fuente
Una forma elegante de mover su archivo a un directorio inexistente es crear la siguiente extensión a la clase nativa FileInfo:
Luego use la nueva extensión MoveTo:
Consulte la documentación de la extensión de métodos .
fuente
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 en él de manera segura. Aunque como medida de precaución, debe probar su código ... capturar bloqueos y capturar las excepciones que la función puede generar si las cosas no salen exactamente como se planeó.
Información adicional para conceptos básicos de E / S de archivos .
fuente
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();
fuente