2017-07-05 22 views
0

我正在寻找一种C#语言的解决方案,它可以将System.IO.Stream转换为byte []。我已经尝试了下面的代码,但我接收byte []为空。有人能指导我从下面的代码中缺少的东西吗?我从Alfresco Web服务获得,除非保存到临时位置,否则我无法读取该文件。转换System.IO.Stream为字节[]

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

检查:https://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream –

+0

流可以是巨大的(大于允许的数组大小),或者甚至是无限的大小;从一般意义上讲,这不是一个好主意! –

回答

0

一旦我做了它的扩展方法:

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; 
} 
+0

请注意,即使查询'.Position'可能失败 - 所有流都不支持 –

+0

好点,修正。顺便说一句,我也需要修复我的图书馆。 :) – taffer