Mi problema principal es que cuando using
llama Dispose
a a StreamWriter
, también elimina el BaseStream
(mismo problema con Close
).
Tengo una solución para esto, pero como puede ver, implica copiar la transmisión. ¿Hay alguna forma de hacer esto sin copiar la transmisión?
El propósito de esto es obtener el contenido de una cadena (originalmente leída de una base de datos) en una secuencia, para que la secuencia pueda ser leída por un componente de terceros.
NB : No puedo cambiar el componente de terceros.
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;
}
Usado como
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idealmente, estoy buscando un método imaginario llamado BreakAssociationWithBaseStream
, por ejemplo
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;
}