Создайте файл из пути, создав подкаталоги, если их не существует - PullRequest
10 голосов
/ 28 сентября 2010

В конфигурации моего приложения есть путь, например "logs \ updater \ updater.log"

При запуске приложения я хочу создать файл updater.log, создав все подпапки, если их не существует.

Итак, если завтра мой пользователь изменит путь в конфигурации на «logs \ mypathisbetter \ updater.log», мое приложение продолжит работу, записывая журнал в новый файл.

File.Create, FileInfo.Create, Streamwriter.Create или около того: они это делают?

Или мне нужно проверить, существуют ли папки, раньше?

Я не могу найти четкий ответ на этот вопрос в сети.

Ответы [ 3 ]

13 голосов
/ 29 сентября 2010

Решено с помощью небольшого кода:

private static void EnsureDirectoryExists(string filePath) 
{ 
  FileInfo fi = new FileInfo(filePath);
  if (!fi.Directory.Exists) 
  { 
    System.IO.Directory.CreateDirectory(fi.DirectoryName); 
  } 
}

Извините за этот действительно новый пост ... Спасибо вам всем! : -)

9 голосов
/ 28 сентября 2010

Нет, похоже, что нет - вы получите исключение DirectoryNotFoundException, я полагаю, из всех трех.

Сначала вам нужно сделать что-то вроде Directory.CreateDirectory(path).

РЕДАКТИРОВАТЬ :

Для более полного решения, начинающегося с пути, включающего имя файла, попробуйте:

    Directory.CreateDirectory(Path.GetDirectoryName(fullPath));

    TextWriter writer = new StreamWriter(fullPath);
    writer.WriteLine("hello mum");
    writer.Close();

Но учтите, что вам понадобится ошибкаобработка, так что писатель всегда закрывается (в блоке finally).

2 голосов
/ 25 января 2019

Другой вариант, если вы просто хотите создать папку / каталог, если он не существует, это просто сделать это в C #:

// using System.IO;
if (!Directory.Exists(destination))
{
    Directory.CreateDirectory(destination);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...