Почему BinaryWriter закрывает внешний поток при утилизации и как это предотвратить? (.NET C#)
У меня есть один метод, который получает поток для записи на него с помощью BinaryWriter. Но когда я избавляюсь от этого BinaryWriter, он также закрывает поток. Могу ли я оставить его неиспользованным, чтобы я мог оставить свой поток открытым?
4 ответа
Только не вызывайте Dispose, вместо этого используйте Flush, это безопасно.
Начиная с.NET 4.5, класс BinaryWriter имеет новый конструктор, который принимает логический параметр, чтобы указать, оставить поток открытым или нет.
Ссылка: http://msdn.microsoft.com/en-us/library/gg712841.aspx
public BinaryWriter(
Stream output,
Encoding encoding,
bool leaveOpen
)
В случае BinaryWriter
это не прямой вариант (хотя некоторые потоковые оболочки позволяют вам контролировать это, например, GZipStream
так далее).
У Джона есть NonClosingStreamWrapper в MiscUtil, который должен работать: вы оборачиваете свой поток в незамкнутую оболочку и отдаете оболочку BinaryWriter
, Это по существу проходит через все, кроме Close()
а также Dispose()
,
Защищенный метод BinaryWriter.Dispose(bool) является виртуальным, и все, что он делает, это закрывает поток (вы можете проверить, что это верно в Reflector). -Этот метод вызывается методом Dispose ().
Вы можете просто унаследовать класс от BinaryWriter и переопределить метод Dispose (bool), чтобы ничего не делать или вообще что-то еще.