2017-05-02 5 views
0

Versuch Stream-Objekt byte [] und mit Hilfe der folgenden Verfahren für das gleiche zu konvertieren:Convert Stream byte [] C# für große Dateien von 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(); 
      } 
} 

jedoch der Eingangsparameter „Eingang“ für groß ist Datei, die von 2 GB ist und daher nicht in die while-Schleife eingeht und daher nicht in Byte-Array konvertiert wird.

Für kleinere Dateien, die es funktioniert gut

+2

Ich vermute, Sie haben eine harte Zeit haben, ein Array mit mehr als 2^31 Elementen zu schaffen. Warum musst du das tun? –

+0

Der Versuch, die große Datei mit Sharepoint 2010 - Client-Objektmodell zu downloaden. Wir haben Datei von 2 GB. Um es herunter zu laden, benutzten wir den folgenden Code: FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect (clientContext, "thisFile"); System.IO.Stream stream = fileInfo.Stream; Nun ist unsere Projektanforderung, dass wir Byte [] und nicht Stream-Objekt zurückgeben wollen und daher versuchen, den Stream in Byte umzuwandeln [] – nina

+0

Diese "Projektanforderung" klingt ziemlich ruppig, um ehrlich zu sein. Haben Sie überprüft, ob ein so großes Byte-Array möglich ist? –

Antwort

1

Das ist, was ein Stream für ist. Sie laden nicht den gesamten Inhalt in eine byte[], Sie lesen einen kleinen Puffer aus dem Stream in den Speicher und behandeln es, dann entsorgen und lesen Sie den nächsten Puffer.

Wenn Sie noch ein byte [] verwenden müssen:

Es scheint, wie Ihre Anwendung kann nicht mehr als 2^32 Bytes Speicher handhaben, es ist 32bit Bedeutung. Versuchen Sie es zu 64-Bit-Wechsel (in Projekteigenschaften gehen zu bauen und deaktivieren Prefer 32 bit)

+0

Wenn Sie das Programm auf "Prefer 32 bit" setzen, wird Ihr Programm nicht 64-bit, sondern nur 64-Bit auf 64-Bit-Betriebssystemen. Das Programm wird weiterhin auf 32-Bit-Betriebssystemen fehlschlagen. Was Sie tun müssen, ist von AnyCPU zu x64 ändern, so dass das Programm nicht auf 32-Bit laufen kann. –

+0

Wir holen die Daten von SharePoint in Form von file.Stream. Unsere Anforderung besteht darin, den Inhalt des Streams in Byte [] abzurufen. Da unsere Projektschnittstelle die Byte-Array-Daten zurückgibt. Wenn es einen anderen einfachen Weg gibt, dann helft bitte – nina