Meu problema raiz é que quando using
chama Dispose
um StreamWriter
, ele também descarta o BaseStream
(mesmo problema com Close
).
Eu tenho uma solução alternativa para isso, mas como você pode ver, envolve copiar o fluxo. Existe alguma maneira de fazer isso sem copiar o fluxo?
O objetivo disso é obter o conteúdo de uma string (originalmente lida de um banco de dados) em um fluxo, para que o fluxo possa ser lido por um componente de terceiros.
NB : Não consigo alterar o componente de terceiros.
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, estou procurando um método imaginário chamado BreakAssociationWithBaseStream
, por exemplo,
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;
}