Почему 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), чтобы ничего не делать или вообще что-то еще.

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