Bir BinaryWriter kullanarak üzerine yazmak için bir Akış alan bir yöntem var. Ama bu BinaryWriter'i elime aldığımda, akışı da kapatır. Akışımı açık bırakabilir miyim, böylece akışımı açık bırakabilirim?Neden bir BinaryWriter imha ederken dış Akımı kapatır ve bunu nasıl önlersiniz? (.NET C#)
cevap
Sadece Dispose'u aramayın, yerine Flush kullanın, güvenli.
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.
Büyük kütüphane, güzel iş! –
Link bozuk: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium
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? –
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.
.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
)
Bu daha yeni bilgiyi sağladığınıza sevindim. Teşekkürler! –
- 1. Konsol neden olmadan kapatır C#
- 2. BinaryWriter kullanarak nasıl bir liste yazarım?
- 3. Foreach tanımlayıcısı ve kapatır
- 4. Dinamik kısa dizi için BinaryReader ve BinaryWriter
- 5. Neden bunu
- 6. IronPython'da bir .NET derlemesini nasıl oluşturabilirim ve bunu C# olarak adlandırırım?
- 7. Nasıl C# bir dış yürütülebilir başlatmak ve süreç
- 8. neden ve objektif c
- 9. Safari'de yetkilendirme üstbilgisini nasıl önlersiniz?
- 10. .Net KeyEventArgs bir C# .net uygulamasında
- 11. Nesne imha etme/imha etme hakkında bildirim alın
- 12. Referans akımı RoleProvider örneği?
- 13. Excel VBA akımı aya dönüş
- 14. Kotlin'de bir nesneyi yok ederken kullanılmayan argümanlar
- 15. 'İlk: {}' bloğunun anlamı nedir ve bunu programın içinde nasıl kullanabiliriz?
- 16. (iOS 5), TableView kapatır?
- 17. Visual C# backtrace: [dış kod] nerede bulunur?
- 18. El/element nedir? Bunu nasıl kullanabilirim? Ve neden?
- 19. Bunu Wxwidget C++
- 20. P/Invoking C# ve .NET
- 21. Tümüyle ilgili bir şey nedir? Ve neden bunu kullanarak guice?
- 22. bir parametreyi nasıl geçirebilirim ve bunu xslt
- 23. TextView yatay olarak başka bir görünümü kapatır ve iter. LinearLayout
- 24. WPF dolaşım ve kullanıcı denetimini imha et
- 25. Sol Dış Bağlan ve Var olan Linq için SQL C# .NET 3.5
- 26. Node.js - mocha ve zombi ile test ederken neden sızıntı alıyorum?
- 27. Bunu neden immutable bir `struct` yapabilirim?
- 28. FileStream.Dispose dosyayı hemen kapatır mı?
- 29. Bir hata alıyorum ve bunu
- 30. Visual Lisp: dış C++ DLL'de işlevler nasıl çağırılır
Evet, Reflektörde kontrol ettim ve doğru. –
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. –
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. –