File.ReadAllBytes Рефакторинг кода - PullRequest
3 голосов
/ 09 октября 2009

Сегодня я наткнулся на этот фрагмент кода:

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 ]

7 голосов
/ 09 октября 2009

Исходный код возвращает нулевую ссылку, если файл пустой, и не выдает исключение, если его невозможно прочитать. Лично я думаю, что лучше возвращать пустой массив, а не проглатывать исключения, но я думаю, что в этом разница между рефакторингом и редизайном.

О, кроме того, если длина файла изменяется от определения длины до ее чтения, тогда исходный код будет считывать исходную длину. Опять же, я думаю, что поведение File.ReadAllBytes лучше.

Что вы хотите случиться, если файл не существует?

2 голосов
/ 09 октября 2009

Это в основном тот же метод, если вы добавляете блок try {...} catch{...}. Имя метода, ReadContentFromFile, еще раз подтверждает эту точку.

Что за минутка ... разве это не должно быть предметом юнит-теста?

1 голос
/ 09 октября 2009

В этом случае нет, вы вообще ничего не пропускаете. с точки зрения файловой операции. Теперь вы знаете, что отсутствие обработки исключений изменит поведение системы.

Это упрощенный способ чтения байтов файла.

ПРИМЕЧАНИЕ: если вам нужно установить какие-либо пользовательские параметры для чтения, вам потребуется длинная форма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...