-1

代码

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.

如何解决这个问题?

4

1 回答 1

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();
}

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

于 2015-09-13T20:16:52.223 回答