Закрытие файла после File.Create
Я проверяю, существует ли файл с
if(!File.Exists(myPath))
{
File.Create(myPath);
}
Однако, когда я иду создать StreamReader
с этим вновь созданным файлом, я получаю сообщение об ошибке
Процесс не может получить доступ к файлу '[мой путь к файлу здесь]', потому что он используется другим процессом.
Нет File.Close(myPath)
, который я могу назвать так, чтобы он был закрыт после создания, поэтому как мне освободить этот ресурс, чтобы я мог его открыть позже в моей программе?
Ответы
Ответ 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
:)