Akar masalah saya adalah ketika using
memanggil Dispose
a StreamWriter
, itu juga membuang BaseStream
(masalah yang sama dengan Close
).
Saya memiliki solusi untuk ini, tetapi seperti yang Anda lihat, ini melibatkan penyalinan aliran. Adakah cara untuk melakukan ini tanpa menyalin aliran?
Tujuannya adalah untuk memasukkan konten string (aslinya dibaca dari database) ke dalam aliran, sehingga aliran dapat dibaca oleh komponen pihak ketiga.
NB : Saya tidak dapat mengubah komponen pihak ketiga.
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;
}
Digunakan sebagai
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idealnya, saya mencari metode imajiner yang disebut BreakAssociationWithBaseStream
, mis
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;
}