c#将system.IO.Stream转换为Byte []

时间:2012-06-29 17:15:52

标签: c# stream byte

我想知道如何将流转换为字节。

我找到了这段代码,但就我而言,它不起作用:

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

但在我的情况下,在行paramFile.CopyTo(memoryStream)中它没有发生任何异常,应用程序仍然有效,但代码不能继续下一行。

感谢。

2 个答案:

答案 0 :(得分:40)

如果您正在阅读文件,请使用File.ReadAllBytes Method

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

此外,只要您的sourceStream支持Length属性,就不需要CopyTo MemoryStream来获取字节数组:

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

答案 1 :(得分:33)

这是我为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;
        }
    }