C#将system.io.stream转换为byte[]

c# convert system.IO.Stream to Byte[]

本问题已经有最佳答案,请猛点这里访问。

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

我找到了这个代码,但在我的例子中它不起作用:

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

但是在我的例子中,在paramfile.copyto(memorystream)行中,它什么也没有发生,没有例外,应用程序仍然可以工作,但是代码不会继续执行下一行。

谢谢。


如果要读取文件,只需使用file.readallbytes方法:

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

此外,只要您的sourcestream支持length属性,就不需要复制到memorystream来获取字节数组:

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


这是我为流类编写的扩展方法

1
2
3
4
5
6
7
8
9
10
11
 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;
        }
    }