У меня есть фрагмент кода, который ломается, если каталог не существует:
System.IO.File.WriteAllText(filePath, content);
Можно ли в одной строке (или нескольких строках) проверить, не существует ли каталог, ведущий к новому файлу, и, если нет, создать его, прежде чем создавать новый файл?
Я использую .NET 3.5.
Ответы:
Создавать
(new FileInfo(filePath)).Directory.Create()
Перед записью в файл..... Или, если он существует, то создай (иначе ничего не делай)
источник
Task.Run(() => );
.Вы можете использовать следующий код
источник
Directory.CreateDirectory
делает именно то, что вы хотите: он создает каталог, если он еще не существует. Там нет необходимости делать явную проверку в первую очередь .path
это файл, а не каталог. msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspxКак сказал @hitec, вы должны быть уверены, что у вас есть нужные разрешения, если вы это сделаете, вы можете использовать эту строку для обеспечения существования каталога:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
источник
Элегантный способ переместить ваш файл в несуществующий каталог - создать следующее расширение для собственного класса FileInfo:
Тогда используйте новое расширение MoveTo:
Проверка методов расширения документации .
источник
Вы можете использовать File.Exists, чтобы проверить, существует ли файл, и создать его, используя File.Create, если требуется. Обязательно проверьте, есть ли у вас доступ для создания файлов в этом месте.
Если вы уверены, что файл существует, вы можете написать в него безопасно. Хотя в качестве меры предосторожности вы должны поместить свой код в блок try ... catch и перехватить исключения, которые может вызвать функция, если все пойдет не так, как планировалось.
Дополнительная информация для основных концепций файлового ввода / вывода .
источник
var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));
var file = new FileInfo(filePath);
file.Directory.Create();
Если каталог уже существует, этот метод ничего не делает.var sw = new StreamWriter(filePath, true);
sw.WriteLine(Enter your message here);
sw.Close();
источник