-2
FileStream fs = File.OpenRead(fullFilePath);
try
{
    Console.WriteLine("Read file size is : " + fs.Length);
    byte[] bytes = new byte[fs.Length]; //// **error this line**
    fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
    fs.Close();
    return bytes;
}
finally
{
    fs.Close();
}

read file size 2,885,760 KB. 是错误 //

**Arithmetic operation resulted in an overflow.**

4

3 回答 3

6

该文件大小超过 2GB。问题是new byte[OverTwoBillionAndSome]超出了限制。如果长度低于2GB,则不会发生此错误(尽管仍建议不要将其完全读入内存)。

考虑改为流式传输数据。

于 2013-06-19T05:19:24.097 回答
0
byte[] bytes = new byte[fs.Length];

2,885,760超过 2GB。你确定你的内存有足够的空间吗?很可能不是,这就是您出现内存不足异常的原因。

即使您在 RAM 中有足够的空间,普通的 32 位也无法分配那么多内存

于 2013-06-19T05:18:52.273 回答
0

正如保罗所说,问题是文件很大。

但是使用 .NET Framework 4.5,您可以使用支持您使用总大小超过 2 GB 的对象的<gcAllowVeryLargeObjects>Element 。

在 64 位平台上,启用总大小大于 2 GB 的阵列。

您只需要更改配置设置,例如;

<configuration>
  <runtime>
    <gcAllowVeryLargeObjects enabled="true" />
  </runtime>
</configuration>
于 2013-06-19T05:42:29.193 回答