Могу ли я повторно открыть дескриптор после того, как 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 ответ

Решение

Нет. Дескриптор запрашивается при открытии файла и становится недействительным после закрытия. Просто держите файл открытым.

ОС хранит карту дескрипторов - на самом деле, только целочисленные идентификаторы - для любого выделенного ресурса. Когда вы освобождаете (или, в данном случае, закрываете) ресурс, эта запись карты удаляется, и все полученные блокировки освобождаются. Любые дальнейшие вызовы с этим дескриптором начнутся с поиска дескриптора на карте, который был удален, поэтому...

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

Другие вопросы по тегам