【问题标题】:How to fix Object 'oFs' can be disposed more than once in method [duplicate]如何修复对象'oFs'可以在方法中多次处理[重复]
【发布时间】:2015-09-13 20:13:13
【问题描述】:

代码

public static void StrToFile(string value, string cFileName)
{
    if (File.Exists(cFileName) == true)
    {
        File.Delete(cFileName);
    }

    FileStream oFs = new FileStream(cFileName, FileMode.CreateNew, FileAccess.ReadWrite);
    StreamWriter oWriter = new StreamWriter(oFs);
    oWriter.Write(value);
    oWriter.Flush();
    oWriter.Close();
    oFs.Close();
}

Visual Studio Community Edition 代码中的原因分析 oFs.Close() 行的错误;

Warning CA2202  Object 'oFs' can be disposed more than once in method 'Core.StrToFile(string, string)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on  an object.

如何解决这个问题?

【问题讨论】:

  • 讨论here可能对你有帮助。
  • 尽管在 3475 点解锁了在提问前使用搜索的权限 :) - 虽然您的情况可能有所不同,但尚不清楚 ca2202 的顶级搜索结果对您有什么帮助。请更新您的帖子以澄清。

标签: c# visual-studio code-analysis vs-community-edition


【解决方案1】:

这里的问题是您将FileStream 对象的所有权授予StreamWriter 对象。因此,当您关闭/处置 StreamWriter 对象时,FileStream 对象也会被关闭/处置,并且分析引擎知道这种关系。

尝试改用using,看看是否可行:

using (FileStream oFs = new FileStream(cFileName, FileMode.CreateNew, FileAccess.ReadWrite))
using (StreamWriter oWriter = new StreamWriter(oFs))
{
    oWriter.Write(value);
    // oWriter.Flush();
}

如果这不起作用,您可能需要将代码重写为更像这样:

using (var oWriter = new StreamWriter(new FileStream(...)))
{
    oWriter.Write(value);
    // oWriter.Flush();
}

即。将流传递给编写器,但不存储对它的引用。我个人不喜欢这种变化,因为如果StreamWriter 的构造函数内部出现问题,我不确定FileStream 对象是否被正确处理。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2014-07-11
  • 2011-04-28
相关资源
最近更新 更多