作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的根本问题是,当 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;
}
最佳答案
如果您使用的是 .NET Framework 4.5 或更高版本,则有一个 StreamWriter overload using which you can ask the base stream to be left open when the writer is closed .
在 .NET Framework 4.5 之前的早期版本中,StreamWriter
假定 它拥有流。选项:
StreamWriter
;只需冲洗即可。Close
/Dispose
的调用,但同时代理其他所有内容。我在 MiscUtil 中实现了它, 如果你想从那里捕获它。关于c# - 有没有办法在不关闭 StreamWriter 的情况下关闭其 BaseStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2666888/
我是一名优秀的程序员,十分优秀!