Benim kök sorun olduğunda olmasıdır using
çağıran Dispose
bir üzerinde StreamWriter
, aynı zamanda elden BaseStream
(aynı problem ile Close
).
Bunun için bir çözümüm var, ancak görebileceğiniz gibi, akışı kopyalamayı içeriyor. Akışı kopyalamadan bunu yapmanın bir yolu var mı?
Bunun amacı, bir dizinin içeriğini (orijinal olarak bir veritabanından okunan) bir akışa almaktır, böylece akış üçüncü taraf bir bileşen tarafından okunabilir.
Not : Üçüncü taraf bileşenini değiştiremiyorum.
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;
}
Olarak kullanıldı
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
İdeal olarak hayali bir yöntem arıyorum BreakAssociationWithBaseStream
, örneğin
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;
}