2017-05-02 51 views
0

的大文件试图转换流对象为byte [],并使用对于相同的以下方法:转换流为byte [] C#为2GB

public static byte[] ReadFully(System.IO.Stream input) 
{ 
      byte[] buffer = new byte[16*1024]; 
      using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) 
      { 
       int read; 
       while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        ms.Write(buffer, 0, read); 
       } 
       return ms.ToArray(); 
      } 
} 

然而输入参数“输入”是用于大文件是2 GB,因此代码不会进入while循环,因此不会将其转换为字节数组。

对于较小的文件,它正在罚款

+2

我怀疑你将有一个艰难的时间超过2^31个元素创建一个数组。你为什么需要这样做? –

+0

尝试使用SharePoint 2010 - 客户端对象模型下载大文件。我们有2GB的文件。因此,下载它我们使用我们下面的代码:FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext,“thisFile”); System.IO.Stream流= fileInfo.Stream;现在我们的项目需求就是我们想要返回byte [],而不是流对象,因此试图转换流的byte [] – nina

+0

那“项目需求”听起来很粘稠,是诚实的。你是否检查过一个大的可行的字节数组? –

回答

1

这就是一个Stream是。 你不全部内容加载到byte[],你看从Stream一个小缓冲区到内存中和处理,然后处理并读取下一个缓冲区。

如果您仍然需要使用一个byte []:

好像你的应用程序无法处理超过2^32 Bytes内存,这意味着它32位。 尝试将其更改为(在项目属性去建立和禁用Prefer 32 bit

+0

将程序更改为“首选32位”不会使程序变为64位,这仅表示您在64位操作系统上使用64位。该程序仍然会在32位操作系统上失败。你需要做的是从AnyCPU转换到x64,所以程序不能在32位上运行。 –

+0

我们以file.Stream的形式从SharePoint获取数据。我们的要求是在byte []中获取流的内容。由于我们的项目接口返回字节数组数据。如果有任何其他简单的方法,请帮助 – nina