我今天遇到了这段代码:
public static byte[] ReadContentFromFile(String filePath)
{
FileInfo fi = new FileInfo(filePath);
long numBytes = fi.Length;
byte[] buffer = null;
if (numBytes > 0)
{
try
{
FileStream fs = new FileStream(filePath, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
buffer = br.ReadBytes((int)numBytes);
br.Close();
fs.Close();
}
catch (Exception e)
{
System.Console.WriteLine(e.StackTrace);
}
}
return buffer;
}
我的第一个想法是将其重构为:
public static byte[] ReadContentFromFile(String filePath)
{
return File.ReadAllBytes(filePath);
}
System.IO.File.ReadAllBytes记录为:
打开二进制文件,读取 文件的内容为一个字节 数组,然后关闭文件。
...但我错过了一些关键的区别吗?
答案 0 :(得分:7)
如果文件为空,原始代码返回空引用,如果无法读取,则不会引发异常。我个人认为最好返回一个空数组,并且不吞下异常,但这就是重构和重新设计之间的差异。
哦,同样,如果在找出长度和读取长度之间改变文件长度,那么原始代码将读取原始长度。我再次认为File.ReadAllBytes
行为更好。
如果文件不存在,您希望发生什么?
答案 1 :(得分:2)
如果添加try {...} catch{...}
块,那基本上是相同的方法。方法名称ReadContentFromFile
进一步证明了这一点。
一分钟......单元测试不应该说明什么?
答案 2 :(得分:1)
在这种情况下,你根本不会遗漏任何东西。从文件操作的角度来看。现在你知道你缺少异常处理会改变系统的行为。
这是一种读取文件字节的简化方法。
注意:如果你需要在阅读时设置任何自定义选项,那么你需要长格式。