我的根本问题是,在using调用Dispose时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;
}
子衿沉夜
ITMISS
相关分类