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

c#将system.IO.Stream转换为字节[],c#,stream,byte,C#,Stream,Byte,我想知道如何将流转换成字节 我发现此代码,但在我的情况下,它不起作用: var memoryStream = new MemoryStream(); paramFile.CopyTo(memoryStream); byte[] myBynary = memoryStream.ToArray(); myBinary = memoryStream.ToArray(); 但是在我的例子中,在paramFile.CopyTo(memoryStream)行中,它什么也没有发生,没有例外,应用程序仍然工作

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

我发现此代码,但在我的情况下,它不起作用:

var memoryStream = new MemoryStream();
paramFile.CopyTo(memoryStream);
byte[] myBynary = memoryStream.ToArray();
myBinary = memoryStream.ToArray();
但是在我的例子中,在paramFile.CopyTo(memoryStream)行中,它什么也没有发生,没有例外,应用程序仍然工作,但是代码不会继续下一行


谢谢。

这是我为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;
        }
    }
公共静态类StreamExtensions
{
公共静态字节[]ToByteArray(此流)
{
流位置=0;
byte[]buffer=新字节[stream.Length];
对于(int TotalBytesCopy=0;TotalBytesCopy
如果您正在读取文件,只需使用:

此外,只要sourceStream支持Length属性,就不需要复制到MemoryStream来获取字节数组:

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

啊,对不起,param file是我在方法中收到的参数,是一个SystemIO.Stream。我真的有一个流,没有这个文件。虽然原始数据是一个文件,但我将该文件发送到WCF中的流中。所以我需要将流转换为字节[]。但是这种方法不起作用,因为length属性是long,read方法使用int。只要不超过2147483647(int.MaxValue)字节,就可以了。否则你必须用计数器来组装数组。雅典,我想你没有额外的FromByteArray方法吗?:-)我正在使用你的方法,我现在只需要能够将其转换回。这可能会有所帮助。
byte[] myBinary = new byte[paramFile.Length];
paramFile.Read(myBinary, 0, (int)paramFile.Length);