Versuch Ausnahme ausgelöst wurde, wenn objFileStream.Length
kehrt Nummer größer als int.MaxValue
(2147483647), weil Length
auf Stream
long
zurückgibt (ich nehme an, objFileStream
ist Strom). In .net arithmetischen Überlauf ist nicht standardmäßig aktiviert.
Next Code demonstriert diesen Fall:
long streamLength = long.MaxValue; //suppose buffer length is big
var res = checked((int)(streamLength + 1)); //exception will be thrown
Console.WriteLine(res); //will print 0 in you comment checked keyword
Nach kurzer Analyse können Sie nächste Anweisung
new Byte[checked((uint)Math.Min(32 * 1024, (int)objFileStream.Length))];
zu
new Byte[Math.Min(32 * 1024, checked((int)objFileStream.Length))];
Persönliche Empfehlung reduzieren: Ich sehe nicht, wie OverflowException
wird Ihnen hier helfen. Math.Min
wird sichergestellt, dass das Array nicht länger als 32768
Elemente erstellt wird. Wenn Sie versuchen, irgendwo in der aufrufenden Methode catch
, können Sie nicht ableiten, was der Grund für diesen Fehler ist, kann es von überall im aufgerufenen Stapel kommen.
So müssen Sie wahrscheinlich nicht immer Array der Größe 32768 zuweisen, wie Sie
byte[] buffer = new Byte[32 * 1024];
vorgeschlagen, aber Math.Min
noch so verwenden, dass Sie Speicher sparen werden, wenn objFileStream.Length
werden kleine Zahl zurückgeben
byte[] buffer = new Byte[Math.Min(32 * 1024, objFileStream.Length)];