BinaryWriter를 사용하여 스트림에 쓸 스트림을받는 메서드가 하나 있습니다. 하지만이 BinaryWriter를 처리하면 스트림도 닫힙니다. 내가 개울을 열어 둘 수 있도록 그것을 놓아 둘 수 있습니까?BinaryWriter가 처분 할 때 외부 스트림을 닫는 이유와이를 방지하는 방법은 무엇입니까? (.NET C#)
답변
Dispose를 호출하지 말고 그냥 플러시를 사용하십시오.
BinaryWriter
의 경우 해당 스트림 래퍼가 제어 할 수 있지만 직접 옵션은 아닙니다 (예 : GZipStream
등).
Jon은 MiscUtil에 NonClosingStreamWrapper가 있습니다. 스트림을 비 닫음 래퍼로 래핑하고 래퍼를 BinaryWriter
으로 지정합니다. 이것은 본질적으로 Close()
과 Dispose()
을 제외한 모든 것을 통과합니다.
위대한 도서관, 좋은 일! –
링크가 끊어진 곳 : http://www.yoda.arachsys.com/csharp/miscutil/ – colithium
해킹이 조금 있다고 생각하지 않습니까? 래퍼를 사용하여 BinnaryWriter의 동작 (및 가정)을 변경하도록 제안 하시겠습니까? –
보호 된 BinaryWriter.Dispose (bool) 메서드는 가상이며 스트림을 닫는 것입니다 (Reflector에서 true인지 확인할 수 있음). -이 메서드는 Dispose() 메서드에서 호출합니다.
BinaryWriter에서 클래스를 단순히 상속하고 Dispose (bool) 메서드를 재정의하여 아무 것도 수행하지 않거나 다른 작업을 수행 할 수 있습니다.
.NET 4.5부터 BinaryWriter 클래스에는 스트림을 열어 둘지 여부를 나타내는 부울 매개 변수를 사용하는 새 생성자가 있습니다.
참조 : http://msdn.microsoft.com/en-us/library/gg712841.aspx
public BinaryWriter(
Stream output,
Encoding encoding,
bool leaveOpen
)
이 새로운 정보를 제공해 주셔서 감사합니다. 감사! –
그래, 반사경에서 그걸 확인 했어. 사실이야. –
안전합니다 _today_. Reflector를 .NET의 최신 버전으로 사용하여 계속해서 안전하다고 확신합니까? 이것은 해결책이 아닙니다. -1. –
항상 안전 할 것입니다. 그냥 작가의 의미 때문입니다. 그냥 왜 지금 처분했는지 생각해보십시오 (msdn의 예제를 참고하십시오). 또한 이것은 .NET에서 IDisposable을 잘못 사용하는 유일한 곳이 아니라는 점에 유의하십시오. 예를 들어 WCF 채널의 Dispose 문제를 잘 알고 있습니다. –