SORU
19 NİSAN 2010, PAZARTESİ


Kapatmadan bir StreamWriter kapatmak için herhangi bir yol'In BaseStream var mı?

Kök benim sorunum using ** 5, Dispose çağırdığında da BaseStream (Close ile aynı sorun) bulunmaktadır.

Bunun için bir çözüm var, ama gördüğünüz gibi akışı kopyalama içerir. Akış kopyalama olmadan bunu yapmak için herhangi bir yolu var mı?

Bu amacı stream üçüncü parti bir bileşen tarafından okunabilir bir akış içine bir dize (aslında bir veritabanından okuma) içeriğini almak için.
NBÜçüncü parti bileşen değiştiremem.

public System.IO.Stream CreateStream(string value)
{
    var baseStream = new System.IO.MemoryStream();
    var baseCopy = new System.IO.MemoryStream();
    using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
    {
        writer.Write(value);
        writer.Flush();
        baseStream.WriteTo(baseCopy); 
    }
    baseCopy.Seek(0, System.IO.SeekOrigin.Begin);
    return baseCopy;
}

Olarak kullanılır

public void Noddy()
{
    System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
    My3rdPartyComponent.ReadFromStream(myStream);
}

İmaginery ideal bir yöntem BreakAssociationWithBaseStream, örneğin denilen arıyorum

public System.IO.Stream CreateStream_Alternate(string value)
{
    var baseStream = new System.IO.MemoryStream();
    using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
    {
        writer.Write(value);
        writer.Flush();
        writer.BreakAssociationWithBaseStream();
    }
    return baseStream;
}

CEVAP
19 NİSAN 2010, PAZARTESİ


Kullanıyorsanız .NET Çerçeve 4.5 veya üstü StreamWriter overload using which you can ask the base stream to be left open when the writer is closed var.

Önceki sürümlerinde .4.5, StreamWriter önce NET Çerçevevarsayarakış var. Seçenekler:

  • StreamWriter; sadece flush atmayın sakın.
  • 13*/Dispose *çağrı yok sayar ama her şeyi birlikte başka vekiller hangi bir akış sarıcı oluşturmak. Eğer oradan istersen al ** 16 yaşında, o bir uygulama var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • RickardRick

    RickardRick

    9 Mart 2007
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008