Vấn đề gốc rễ của tôi là khi using
các cuộc gọi Dispose
trên a StreamWriter
, nó cũng xử lý BaseStream
(cùng một vấn đề với Close
).
Tôi có một giải pháp cho việc này, nhưng như bạn thấy, nó liên quan đến việc sao chép luồng. Có cách nào để thực hiện việc này mà không cần sao chép luồng không?
Mục đích của việc này là đưa nội dung của một chuỗi (ban đầu được đọc từ cơ sở dữ liệu) vào một luồng, do đó, luồng có thể được đọc bởi một thành phần bên thứ ba.
NB : Tôi không thể thay đổi thành phần của bên thứ ba.
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;
}
Được dùng như
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Lý tưởng nhất là tôi đang tìm kiếm một phương pháp tưởng tượng được gọi là BreakAssociationWithBaseStream
, ví dụ:
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;
}