如何正确处理File.OpenRead()。我当前正在使用以下代码?
using (BinaryReader br = new BinaryReader(File.OpenRead(path)))
{
myByte = br.ReadByte();
}
分析代码时,我在Visual Studio中得到以下内容:
最佳答案
乍看之下,这看起来像是误报,因为处理BinaryReader
还会处理FileStream
返回的File.OpenRead
:
来自:http://msdn.microsoft.com/en-us/library/azy2k2bx.aspx
但是,有一种极端的情况,实际上并未处理FileStream
:当BinaryReader
的构造函数引发异常时!
解决方案:
编写代码的正确方法如下:
using (var fs = File.OpenRead(path))
{
BinaryReader br = new BinaryReader(fs);
myByte = br.ReadByte();
}
背景:
BinaryReader
仅保存对FileStream
的引用,因此不需要处理。代码分析对此观点表示赞同。
顺便说一句:当将此解决方案用于可写流时,重要的是在处理流之前冲洗写入器:
using (var fileStream = new FileStream(...))
{
var writer = new StreamWriter(fileStream);
writer.WriteLine(...);
writer.Flush(); // <-- Important
}
如果您忘记了这一点,则您的流可能不会包含使用
StreamWriter
编写的所有内容。