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

Почему BinaryWriter закрывает внешний поток при утилизации и как его предотвратить? (.NET С#)

У меня есть один метод, который получает Stream для записи на нем с помощью BinaryWriter. Но когда я распоряжаюсь этим BinaryWriter, он также закрывает поток. Могу ли я оставить его открытым, чтобы я мог оставить мой поток открытым?

4b9b3361

Ответ 1

Просто не вызывайте Dispose, вместо этого используйте Flush, его сейф.

Ответ 2

Начиная с .NET 4.5, класс BinaryWriter имеет новый конструктор, который принимает логический параметр, чтобы указать, следует ли оставить поток открытым или нет.

Ссылка: http://msdn.microsoft.com/en-us/library/gg712841.aspx

public BinaryWriter(
    Stream output,
    Encoding encoding,
    bool leaveOpen
)

Ответ 3

В случае BinaryWriter это не является прямой опцией (хотя некоторые обтекатели потоков позволяют вам управлять этим, например GZipStream и т.д.).

У Jon есть NonClosingStreamWrapper в MiscUtil, который должен работать: вы завершаете свой поток в не закрывающей оболочке и предоставляете обертке BinaryWriter. Это существенно проходит через все, кроме Close() и Dispose().

Ответ 4

Защищенный метод BinaryWriter.Dispose(bool) является виртуальным, и все, что он делает, закрывает поток (вы можете проверить, что оно истинно в Reflector). -Этот метод вызывается методом Dispose().

Вы можете просто наследовать класс из BinaryWriter и переопределить метод Dispose (bool), чтобы ничего не делать или что-то еще все вместе.