ปัญหาหลักของฉันคือเมื่อusing
เรียกDispose
ใช้ a StreamWriter
มันจะกำจัดBaseStream
(ปัญหาเดียวกันกับClose
)
ฉันมีวิธีแก้ปัญหานี้ แต่อย่างที่คุณเห็นมันเกี่ยวข้องกับการคัดลอกสตรีม มีวิธีใดบ้างที่ทำได้โดยไม่ต้องคัดลอกสตรีม
จุดประสงค์ของสิ่งนี้คือการรับเนื้อหาของสตริง (เดิมอ่านจากฐานข้อมูล) ไปยังสตรีมดังนั้นส่วนประกอบของบุคคลที่สามจึงสามารถอ่านสตรีมได้
หมายเหตุ : ฉันไม่สามารถเปลี่ยนองค์ประกอบของบุคคลที่สามได้
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;
}