Il mio problema principale è che quando using
chiama Dispose
a StreamWriter
, elimina anche lo BaseStream
(stesso problema con Close
).
Ho una soluzione alternativa per questo, ma come puoi vedere, si tratta di copiare lo stream. C'è un modo per farlo senza copiare lo stream?
Lo scopo di ciò è ottenere il contenuto di una stringa (originariamente letta da un database) in uno stream, in modo che lo stream possa essere letto da un componente di terze parti.
NB : non posso cambiare il componente di terze parti.
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;
}
Usato come
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idealmente sto cercando un metodo immaginario chiamato BreakAssociationWithBaseStream
, ad es
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;
}