2009-10-09 7 views
3

Je suis tombé sur ce morceau de code aujourd'hui:code File.ReadAllBytes refactorisation

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; 
} 

Ma première pensée est de le refactoriser à ceci:

public static byte[] ReadContentFromFile(String filePath) 
{ 
    return File.ReadAllBytes(filePath); 
} 

System.IO.File.ReadAllBytes est documentée comme:

ouvre un fichier binaire, lit le contenu du fichier dans un tableau d'octets et ferme alors le fichier.

... mais est-ce qu'il me manque une différence clé?

Répondre

7

Le code d'origine renvoie une référence null si le fichier est vide et ne lève pas une exception s'il ne peut pas être lu. Personnellement, je pense qu'il est préférable de retourner un tableau vide, et non exceptions Avale, mais c'est la différence entre refactoring et redessiner je suppose. Oh, aussi, si la longueur du fichier est modifiée entre trouver la longueur et la lire, alors le code original lira la longueur d'origine. Encore une fois, je pense que le comportement File.ReadAllBytes est meilleur.

Que voulez-vous arriver si le fichier n'existe pas?

1

Dans ce cas, aucun ne vous manque rien du tout. à partir d'un point de vue d'opération de fichier. Maintenant vous savez que votre absence de gestion des exceptions va changer le comportement du système.

Il est une façon simplifiée de lire les octets d'un fichier. REMARQUE: si vous devez définir des options personnalisées sur la lecture, vous aurez besoin du formulaire long.

2

C'est essentiellement la même méthode si vous ajoutez le bloc try {...} catch{...}. Le nom de la méthode, ReadContentFromFile, prouve encore le point.

Quelle minute ... est pas quelque chose d'un test unitaire doit dire?

Questions connexes