Converting System.IO.Stream to Byte[]
本问题已经有最佳答案,请猛点这里访问。
我正在寻找一种C语言的解决方案,可以将System.IO.Stream转换为byte[]。我试过下面的代码,但我收到的字节为空。有人能从下面的代码中找出我缺少的东西吗?我正在从Alfresco Web服务接收,除非保存到临时位置,否则无法读取文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private static byte[] ReadFile(Stream fileStream) { byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, Convert.ToInt32(fileStream.Length)); fileStream.Close(); return bytes; //using (MemoryStream ms = new MemoryStream()) //{ // int read; // while ((read = fileStream.Read(bytes, 0, bytes.Length)) > 0) // { // fileStream.CopyTo(ms); // } // return ms.ToArray(); //} } |
一旦我为它做了一个扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static byte[] ToArray(this Stream s) { if (s == null) throw new ArgumentNullException(nameof(s)); if (!s.CanRead) throw new ArgumentException("Stream cannot be read"); MemoryStream ms = s as MemoryStream; if (ms != null) return ms.ToArray(); long pos = s.CanSeek ? s.Position : 0L; if (pos != 0L) s.Seek(0, SeekOrigin.Begin); byte[] result = new byte[s.Length]; s.Read(result, 0, result.Length); if (s.CanSeek) s.Seek(pos, SeekOrigin.Begin); return result; } |