Moim głównym problemem jest to, że kiedy using
wywołuje Dispose
a StreamWriter
, usuwa również BaseStream
(ten sam problem z Close
).
Mam obejście tego problemu, ale jak widzisz, wymaga to skopiowania strumienia. Czy można to zrobić bez kopiowania strumienia?
Ma to na celu pobranie zawartości ciągu (pierwotnie odczytanego z bazy danych) do strumienia, aby strumień mógł zostać odczytany przez komponent innej firmy.
Uwaga : nie mogę zmienić komponentu innej firmy.
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;
}
Użyty jako
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idealnie szukam wyimaginowanej metody o nazwie BreakAssociationWithBaseStream
np
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;
}