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

.NET File.Create, не удается удалить файл после

Использование метода: System.IO.File.Create()

После создания файла он все еще остается используемым процессом, и я не могу его удалить.

Любая идея, как я могу лучше создать файл, должен быть 0-байтным файлом, а затем как-то закрыть и распоряжаться?

4b9b3361

Ответ 1

ДЛ,

Вы должны поместить свой вызов в. Создайте в инструкции using, чтобы FileStream, что .Create return будет закрыт должным образом. IE:

using (File.Create("path")){...}

Ответ 2

Метод Create не только создает файл, он открывает его и возвращает объект FileStream, который вы можете использовать для записи в файл.

Вы должны закрыть файл после себя, иначе он не будет закрыт до того, как сборщик мусора очистит объект FileStream.

Самый простой способ - просто закрыть файл, используя ссылку, возвращаемую методом Create:

File.Create(fileName).Close();

Ответ 3

nikmd23 имеет короткий ответ, длинный ответ: FileStream, возвращаемый File.Create(...), не детерминируется, поэтому его дескриптор не закрывается, когда вы пытаетесь его удалить.

Как полагает nikmd23, завершение вашего вызова File.Create(...) будет выполняться с помощью оператора using, убедитесь, что поток закрыт и удален:

using (FileStream fs = File.Create(path)) { 
  // do anything with the stream if need-be...
}
File.Delete(path); //after it been disposed of.

Блок using(...) на самом деле является только компилятором-сахаром для:

FileStream fs = File.Create(path);
try { 
   // do anything with the stream if need-be...
}
finally { 
  fs.Dispose();
}
File.Delete(path)

Ответ 4

Вы должны использовать ответ nikmd23 почти во всех случаях. Если вы не можете, потому что вам нужно передать FileStream в другое место, обязательно вызовите метод FileStream.Close. Предпочтительно у вас будет класс, который "владеет" FileStream реализует IDisposable сам и закрывает поток в своем методе Dispose.

Для получения дополнительной информации об использовании IDisposable обратитесь к документация MSDN, Более легкое чтение и более актуальное, Joe Duffy post по теме.

Ответ 5

using(FileStream f = File.Create(file_path))
{
  // ... do something with file
  f.Close();
}

"f.Close();" файл закрытия строки немедленно. Если не закрыть вручную, Disposing может не закрыть его.

Ответ 6

См. System.IO.File.Create(String) Метод описание параметра и возвращаемого значения

Параметры

путь     Тип: System.String    Путь и имя создаваемого файла.

Возвращаемое значение

Тип: System.IO.FileStream

A FileStream, который обеспечивает доступ для чтения/записи к файлу, указанному в пути.

Возвращаемое значение FileStream доступно для доступа IO к созданному файлу. Если вам не интересно писать (или читать) вновь созданный файл, закрыть поток. Это то, что обеспечивает блок using.