Подтвердить что ты не робот

Закрытие файла после File.Create

Я проверяю, существует ли файл с

if(!File.Exists(myPath))
{
    File.Create(myPath);
}

Однако, когда я иду создать StreamReader с этим вновь созданным файлом, я получаю сообщение об ошибке

Процесс не может получить доступ к файлу '[мой путь к файлу здесь]', потому что он используется другим процессом.

Нет File.Close(myPath), который я могу назвать так, чтобы он был закрыт после создания, поэтому как мне освободить этот ресурс, чтобы я мог его открыть позже в моей программе?

4b9b3361

Ответ 1

File.Create(string) возвращает экземпляр класса FileStream. Вы можете вызвать метод Stream.Close() на этом объекте, чтобы закрыть его и освободить ресурсы, которые он использует:

var myFile = File.Create(myPath);
myFile.Close();

Однако, поскольку FileStream реализует IDisposable, вы можете воспользоваться оператором using (как правило, предпочтительный способ обработки такой ситуации). Это гарантирует, что поток будет закрыт и утилизирован правильно, когда вы закончите с ним:

using (var myFile = File.Create(myPath))
{
   // interact with myFile here, it will be disposed automatically
}

Ответ 2

Функция возвращает объект FileStream. Поэтому вы можете использовать его возвращаемое значение, чтобы открыть свой StreamWriter или закрыть его, используя правильный метод объекта:

File.Create(myPath).Close();

Ответ 3

File.Create возвращает объект FileStream, который вы можете вызвать Close().

Ответ 4

Причина в том, что FileStream возвращается из вашего метода для создания файла. Вы должны вернуть FileStream в переменную или вызвать метод close непосредственно после файла File.Create.

Лучше всего позволить блоку using помочь вам реализовать шаблон IDispose для такой задачи. Возможно, лучше всего будет работать:

if(!File.Exists(myPath)){
   using(FileStream fs = File.Create(myPath))
   using(StreamWriter writer = new StreamWriter(fs)){
      // do your work here
   }
}

Ответ 5

File.WriteAllText(file,content)

создать записывать близко

File.WriteAllBytes--   type binary

:)