gpt4 book ai didi

c# - 有没有办法在不关闭 StreamWriter 的情况下关闭其 BaseStream?

转载 作者:IT王子 更新时间:2023-10-29 03:35:21 24 4
gpt4 key购买 nike

我的根本问题是,当 usingStreamWriter 上调用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com