75 votes

Un moyen élégant de consommer (tous les octets d'un) BinaryReader ?

Existe-t-il un moyen élégant d'émuler le StreamReader.ReadToEnd méthode avec BinaryReader ? Peut-être faut-il mettre tous les octets dans un tableau d'octets ?

Je fais ça :

read1.ReadBytes((int)read1.BaseStream.Length);

...mais il doit y avoir un meilleur moyen.

2 votes

Je pense qu'après tout, c'est le moyen le plus élégant.

0voto

mageos Points 323

Une autre approche de ce problème consiste à utiliser les méthodes d'extension C# :

public static class StreamHelpers
{
   public static byte[] ReadAllBytes(this BinaryReader reader)
   {
      // Pre .Net version 4.0
      const int bufferSize = 4096;
      using (var ms = new MemoryStream())
      {
        byte[] buffer = new byte[bufferSize];
        int count;
        while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
            ms.Write(buffer, 0, count);
        return ms.ToArray();
      }

      // .Net 4.0 or Newer
      using (var ms = new MemoryStream())
      {
         stream.CopyTo(ms);
         return ms.ToArray();
      }
   }
}

Cette approche permet d'obtenir un code à la fois réutilisable et lisible.

6 votes

Cela ne fonctionne pas - la variable "stream" de la section .NET 4.0 n'est définie nulle part.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X