Моя коренева проблема полягає в тому, що під час using
виклику Dispose
на a 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;
}