Могу ли я повторно открыть дескриптор после того, как FileStream закроет его в C#?
Я хочу знать, могу ли я повторно открыть дескриптор после того, как FileStream закроет его??
это мой код
static void Main(string[] args)
{
string path = "Hello";
SafeFileHandle handle = File.Open(path, FileMode.OpenOrCreate).SafeFileHandle;
using (FileStream fs1 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
using (FileStream fs2 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
Console.ReadKey();
}
я получаю сообщение об ошибке "дескриптор был закрыт" при объявлении fs2 .
Спасибо:)
1 ответ
Нет. Дескриптор запрашивается при открытии файла и становится недействительным после закрытия. Просто держите файл открытым.
ОС хранит карту дескрипторов - на самом деле, только целочисленные идентификаторы - для любого выделенного ресурса. Когда вы освобождаете (или, в данном случае, закрываете) ресурс, эта запись карты удаляется, и все полученные блокировки освобождаются. Любые дальнейшие вызовы с этим дескриптором начнутся с поиска дескриптора на карте, который был удален, поэтому...
Не пойдет. Либо повторно откройте файл, либо найдите способ оставить его открытым при необходимости. На самом деле, я презираю реализации, которые блокируют файлы. Подавляющему большинству приложений, которые делают это, действительно не нужно, и это просто вызывает проблемы. Откройте файл, загрузите данные, закройте файл, измените данные и сделайте дамп при необходимости. Существует очень и очень мало веских причин держать файл открытым дольше одного вызова функции.