Моя основная проблема заключается в том, что когда using
вызывает Dispose
на StreamWriter
, он также удаляет BaseStream
(та же проблема с Close
).
У меня есть обходной путь для этого, но, как вы можете видеть, это включает в себя копирование потока. Есть ли способ сделать это без копирования потока?
Целью этого является получение содержимого строки (первоначально считанной из базы данных) в поток, чтобы поток мог быть прочитан сторонним компонентом.
NB : я не могу изменить сторонний компонент.
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;
}
Используется как
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
В идеале я ищу воображаемый метод, называемый BreakAssociationWithBaseStream
, например,
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;
}