web-dev-qa-db-fra.com

c # convertir system.IO.Stream en octets []

Je voudrais savoir comment convertir un flux en octet.

Je trouve ce code, mais dans mon cas, il ne fonctionne pas:

var memoryStream = new MemoryStream();
paramFile.CopyTo(memoryStream);
byte[] myBynary = memoryStream.ToArray();
myBinary = memoryStream.ToArray();

Mais dans mon cas, dans la ligne paramFile.CopyTo (memoryStream) il ne se passe rien, aucune exception, l'application fonctionne toujours, mais le code ne continue pas avec la ligne suivante.

Merci.

21
Álvaro García

Si vous lisez un fichier, utilisez simplement la méthode File.ReadAllBytes :

byte[] myBinary = File.ReadAllBytes(@"C:\MyDir\MyFile.bin");

De plus, il n'est pas nécessaire de copier vers un MemoryStream juste pour obtenir un tableau d'octets tant que votre sourceStream prend en charge la propriété Length:

byte[] myBinary = new byte[paramFile.Length];
paramFile.Read(myBinary, 0, (int)paramFile.Length);
42
JamieSee

Ceci est une méthode d'extension que j'ai écrite pour la classe Stream

 public static class StreamExtensions
    {
        public static byte[] ToByteArray(this Stream stream)
        {
            stream.Position = 0;
            byte[] buffer = new byte[stream.Length];
            for (int totalBytesCopied = 0; totalBytesCopied < stream.Length; )
                totalBytesCopied += stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied);
            return buffer;
        }
    }
34
Athens Holloway