File.ReadAllBytes代码重构

时间:2009-10-09 16:13:32

标签: c# file-io refactoring

我今天遇到了这段代码:

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记录为:

  

打开二进制文件,读取   文件的内容为一个字节   数组,然后关闭文件。

...但我错过了一些关键的区别吗?

3 个答案:

答案 0 :(得分:7)

如果文件为空,原始代码返回空引用,如果无法读取,则不会引发异常。我个人认为最好返回一个空数组,并且吞下异常,但这就是重构和重新设计之间的差异。

哦,同样,如果在找出长度和读取长度之间改变文件长度,那么原始代码将读取原始长度。我再次认为File.ReadAllBytes行为更好。

如果文件不存在,您希望发生什么?

答案 1 :(得分:2)

如果添加try {...} catch{...}块,那基本上是相同的方法。方法名称ReadContentFromFile进一步证明了这一点。

一分钟......单元测试不应该说明什么?

答案 2 :(得分:1)

在这种情况下,你根本不会遗漏任何东西。从文件操作的角度来看。现在你知道你缺少异常处理会改变系统的行为。

这是一种读取文件字节的简化方法。

注意:如果你需要在阅读时设置任何自定义选项,那么你需要长格式。