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

System.IO.File.Create блокировка файла

Я использую System.IO.File.Create для создания файла. Я не пишу с ним потоковым писателем, просто создавая его.

Я получаю ошибку сервера в интерфейсе, когда приложение пытается открыть вновь созданный файл - этот файл используется. Похоже, что сбор мусора идет, и через несколько минут все в порядке.

Теперь я знаю, что если бы я использовал Streamwriter, мне пришлось бы его закрыть. То же самое относится к созданию?

Я читал, что открытие сценария потока в файл, а затем его закрытие будет исправлено, но это кажется беспорядочным. Есть ли более простой способ?

4b9b3361

Ответ 1

File.Create возвращает a FileStream. Вы должны использовать его следующим образом:

using (FileStream fs = File.Create(path))
{
    //you can use the filstream here to put stuff in the file if you want to
}

Ответ 2

Попробуйте следующее:

System.IO.File.Create(FullFName).Close();

Ответ 3

Создание файла открывает для него FileStream, следовательно, его блокировку (File.Create возвращает FileStream).

Вы должны закрыть этот поток, чтобы получить доступ к файлу. Это лучше всего сделать с помощью инструкции using:

using(FileStream fs = File.Create(path))
{
}

Ответ 4

При использовании File.Create вы получите возвращаемый FileStream. Пока вы не закрываете поток или пока объект FileStream не будет удален (сборщиком сборщика мусора), он останется открытым и заблокирован.

FileStream реализует IDisposable, чтобы вы могли сделать следующее:

using(FileStream fs = File.Create(filename))
{
    // Do stuff like write to the file
}

Оператор using представляет собой "синтаксический сахар" и заставляет компилятор генерировать код, функционально эквивалентный:

FileStream fs = File.Create(filename)
try
{
    // Do stuff like write to the file
}
finally
{
    fs.Dispose();
}

Метод Dispose вызывает Close внутренне.

Ответ 5

Метод Create вернет дескриптор файла. Перед повторным использованием файла дескриптор файла должен быть закрыт. Подробнее см. В статье MSDN File.Create Method (String).

Резюме:

Объект FileStream, созданный этим методом, имеет значение FileShare по умолчанию None; ни один другой процесс или код не могут получить доступ к созданному файлу до тех пор, пока дескриптор исходного файла не будет закрыт.

Ответ 6

Я использовал: System.IO.File.Create(sFullFileName);

Вышеупомянутый метод .Create не закрывал файл

Теперь я использую: System.IO.File.WriteAllText(sFullFileName, "Uploading");

Этот метод создает и закрывает файл (обратите внимание: я поместил строку "Uploading" в файл, но я уверен, что string.Empty также будет работать.