У меня есть один метод, который получает Stream для записи на нем с помощью BinaryWriter. Но когда я распоряжаюсь этим BinaryWriter, он также закрывает поток. Могу ли я оставить его открытым, чтобы я мог оставить мой поток открытым?
Почему BinaryWriter закрывает внешний поток при утилизации и как его предотвратить? (.NET С#)
Ответ 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), чтобы ничего не делать или что-то еще все вместе.