Mein Grundproblem ist, dass beim using
Aufruf Dispose
von a StreamWriter
auch das BaseStream
(gleiche Problem mit Close
) beseitigt wird .
Ich habe eine Problemumgehung dafür, aber wie Sie sehen können, muss der Stream kopiert werden. Gibt es eine Möglichkeit, dies zu tun, ohne den Stream zu kopieren?
Der Zweck hierbei besteht darin, den Inhalt einer Zeichenfolge (ursprünglich aus einer Datenbank gelesen) in einen Stream zu übertragen, damit der Stream von einer Komponente eines Drittanbieters gelesen werden kann.
NB : Ich kann die Komponente eines Drittanbieters nicht ändern.
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;
}
Benutzt als
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Idealerweise suche ich nach einer imaginären Methode namens BreakAssociationWithBaseStream
z
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;
}