最佳答案
我的根本问题是,当 using
在 StreamWriter
上调用 Dispose
时,它也会处理 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;
}