Как исправить Объект 'oFs' может быть размещен в методе более одного раза
Код
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 code Анализ ошибки в строке 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.
Как это исправить?
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
объект правильно утилизируется.