2009-07-05 10 views

cevap

10

Sadece Dispose'u aramayın, yerine Flush kullanın, güvenli.

+0

Evet, Reflektörde kontrol ettim ve doğru. –

+4

Bu güvenli _today_. Güvenli olmaya devam ettiğinden emin olmak için Reflector'u hiç bir zaman .NET'in kullanımına sunacak mısınız? Bu bir çözüm değil. -1. –

+2

Her zaman güvenli olacaktır. Sadece yazar semantiği yüzünden. Sadece şimdilik neden attığını düşün (msdn'deki örneklere bakınız). Ayrıca, .NET'te IDisposable'ı yanlış kullanan tek yer değil, örneğin WCF kanalları ile iyi bir şekilde Dispose sorunu olduğunu unutmayın. –

21

BinaryWriter söz konusu olduğunda, bu doğrudan bir seçenek değildir (bazı akış sarmalayıcıları bunu kontrol etmenize izin verse de, örneğinvb.).

Jon, MiscUtil numaralı telefondan bir NonClosingStreamWrapper uygulamasına sahip olmalıdır; bu da çalışacak: akışınızı kapanmayan sarıcıya sarın ve sargıcıya BinaryWriter verin. Bu aslında Close() ve Dispose() dışındaki her şeyden geçer.

+0

Büyük kütüphane, güzel iş! –

+0

Link bozuk: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium

+0

Biraz hack olduğunu düşünmüyor musunuz? BinnaryWriter'in davranışını (ve varsayımlarını) sarmalayıcı ile kandırarak değiştirmeyi mi öneriyorsunuz? –

9

Korumalı BinaryWriter.Dispose (bool) yöntemi sanaldır ve tüm yaptığı akışı kapatır (Reflector'da doğru olduğunu kontrol edebilirsiniz). -Bu yöntem Dispose() yöntemi tarafından çağrılır.

BinaryWriter'den bir sınıfı miras alabilir ve hiçbir şeyi yapmamak için Dispose (bool) yöntemini geçersiz kılabilirsiniz.

47

.NET 4.5'den itibaren, BinaryWriter sınıfı, akışı açık bırakmak isteyip istemediğinizi belirtmek için bir boole parametresi kullanan yeni bir kurucuya sahiptir.

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

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

Bu daha yeni bilgiyi sağladığınıza sevindim. Teşekkürler! –

İlgili konular