2009-07-05 7 views

답변

10

Dispose를 호출하지 말고 그냥 플러시를 사용하십시오.

+0

그래, 반사경에서 그걸 확인 했어. 사실이야. –

+4

안전합니다 _today_. Reflector를 .NET의 최신 버전으로 사용하여 계속해서 안전하다고 확신합니까? 이것은 해결책이 아닙니다. -1. –

+2

항상 안전 할 것입니다. 그냥 작가의 의미 때문입니다. 그냥 왜 지금 처분했는지 생각해보십시오 (msdn의 예제를 참고하십시오). 또한 이것은 .NET에서 IDisposable을 잘못 사용하는 유일한 곳이 아니라는 점에 유의하십시오. 예를 들어 WCF 채널의 Dispose 문제를 잘 알고 있습니다. –

21

BinaryWriter의 경우 해당 스트림 래퍼가 제어 할 수 있지만 직접 옵션은 아닙니다 (예 : GZipStream 등).

Jon은 MiscUtil에 NonClosingStreamWrapper가 있습니다. 스트림을 비 닫음 래퍼로 래핑하고 래퍼를 BinaryWriter으로 지정합니다. 이것은 본질적으로 Close()Dispose()을 제외한 모든 것을 통과합니다.

+0

위대한 도서관, 좋은 일! –

+0

링크가 끊어진 곳 : http://www.yoda.arachsys.com/csharp/miscutil/ – colithium

+0

해킹이 조금 있다고 생각하지 않습니까? 래퍼를 사용하여 BinnaryWriter의 동작 (및 가정)을 변경하도록 제안 하시겠습니까? –

9

보호 된 BinaryWriter.Dispose (bool) 메서드는 가상이며 스트림을 닫는 것입니다 (Reflector에서 true인지 확인할 수 있음). -이 메서드는 Dispose() 메서드에서 호출합니다.

BinaryWriter에서 클래스를 단순히 상속하고 Dispose (bool) 메서드를 재정의하여 아무 것도 수행하지 않거나 다른 작업을 수행 할 수 있습니다.

47

.NET 4.5부터 BinaryWriter 클래스에는 스트림을 열어 둘지 여부를 나타내는 부울 매개 변수를 사용하는 새 생성자가 있습니다.

참조 : http://msdn.microsoft.com/en-us/library/gg712841.aspx

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

이 새로운 정보를 제공해 주셔서 감사합니다. 감사! –