【问题标题】:Properly Disposing StreamWriter by use of using statement [duplicate]使用 using 语句正确处理 StreamWriter [重复]
【发布时间】:2018-10-17 09:15:32
【问题描述】:

using 中,我正在生成一个Stream

using (var generatedStream = GenerateStream(str))
{
    var streamContent = generatedStream;
}

GenerateStream(string s) 看起来像这样:

private static Stream GenerateStream(string s)
{
    var stream = new MemoryStream();
    using (var writer = new StreamWriter(stream))
    {
        writer.Write(s);
        writer.Flush();
        stream.Position = 0;
        return stream;
    }
}

当我将generatedStream 分配给streamContent 时,更具体地说,当我退出GenerateStream 中的using 语句时,它表示stream 已被释放。我在确保处置我的作家方面做错了什么?

更新:

链接问题中发布的解决方案似乎是解决此特定问题的方法。

【问题讨论】:

  • 问题是在GenerateStream 内部你释放了writer,而stream 又释放了stream,因为StreamWriter 控制了底层流。我记得有办法告诉StreamWriter 不要那样做,但我就是找不到他们......
  • 这可能会有所帮助:stackoverflow.com/a/2666906/1009661
  • @RenéVogt 我相信这将是链接的重复帖子
  • @Rahul 是的,就是这样。在其他构造函数中,我发现采用布尔值,该布尔值用于指示追加或覆盖模式......这就是我感到困惑的原因。

标签: c# using


【解决方案1】:

using 语句已经帮助处理流。它在代码块的末尾处理。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement

【讨论】:

    【解决方案2】:

    您的方法 GenerateStream() 中的 using 语句不应出现

    using (var writer = new StreamWriter(stream))
    {
    

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2015-05-01
      相关资源
      最近更新 更多