我的根本问题是,在using调用Dispose时StreamWriter,它还会处理BaseStream(与相同的问题Close)。
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,例如
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; }
如果使用的是.NET Framework 4.5或更高版本,则存在StreamWriter重载,使用该重载可以要求在关闭writer时要求基本流保持打开状态。
在4.5之前的.NET Framework的早期版本中,StreamWriter 假定 它拥有流。选项: