2017-05-02 80 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