有什么办法可以在不closuresBaseStream的情况下closuresStreamWriter?
我的根本问题是,当在StreamWriter上using调用Dispose时,它也会处理BaseStream (与Close相同的问题)。 
我有一个解决方法,但你可以看到,它涉及复制stream。 有没有办法做到这一点,而不复制stream?
 这样做的目的是将string(最初从数据库中读取)的内容转换为stream,以便第三方组件可以读取该stream。 
  注意 :我无法更改第三方组件。 
 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; } 
	
如果您使用的是.NET Framework 4.5或更高版本,则会出现StreamWriter重载,通过该重载,您可以要求基本stream在closures写入器时保持打开状态 。
 在早于4.5版本的早期版本的.NET Framework中, StreamWriter 假定它拥有该stream。 选项: 
-  不要丢弃StreamWriter; 只是冲洗它。
-  创build一个忽略调用Close/Dispose的stream包装器,但代理其他所有东西。 我有一个MiscUtil的实现,如果你想从那里抓住它。
.NET 4.5有新的方法!
http://msdn.microsoft.com/EN-US/library/gg712853(v=VS.110,d=hv.2).aspx
 public StreamWriter( Stream stream, Encoding encoding, int bufferSize, bool leaveOpen ) 
 只要不要在StreamWriter上调用Dispose 。 这个类可以丢弃的原因不是因为它拥有非托pipe资源,而是允许处理本身可能拥有非托pipe资源的stream。 如果底层stream的生命在别处处理,则不需要处置作者。 
内存stream具有即使在closuresstream时也可以使用的ToArray属性。 数组写入stream内容到一个字节数组,无论Position属性如何。 您可以根据您写入的stream创build新的stream。
 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); } var returnStream = new System.IO.MemoryStream( baseCopy.ToArray()); return returnStream; } 
您需要创buildStreamWriter的后代并覆盖它的dispose方法,通过总是将false传递给disposing参数,它将强制streamwriter不closures,StreamWriter只是在close方法中调用dispose,所以不需要重写它(当然你可以添加所有的构造函数,如果你想,我只有一个):
 public class NoCloseStreamWriter : StreamWriter { public NoCloseStreamWriter(Stream stream, Encoding encoding) : base(stream, encoding) { } protected override void Dispose(bool disposing) { base.Dispose(false); } }