刚刚对我继承的其中一个应用程序进行了代码分析,并引发了类似于以下代码的警告:
using (StreamWriter tw = File.AppendText("Log.txt"))
{
try
{
tw.WriteLine(DateTime.Now.ToString("------------------------");
tw.WriteLine(data);
}
catch(Exception ex)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "Error writing to the log file: {0}", ex.Message));
}
finally
{
tw.Close();
}
}
如果我注释掉finally
块,则不会发出警告。我的印象是关闭流编写器只关闭了底层文件,但实际上没有处理writer对象。代码分析是否被破坏,或者我是否误解了应该如何使用流编写器?
这是另一个例子,其中代码分析抱怨可能两次处理writer和底层流:
using (TextReader tr = new StreamReader(File.OpenRead(filename)))
{
while (tr.ReadLine() != null)
{
counter++;
}
tr.Close();
}
它抱怨tr
和File.OpenRead(filename)