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.**
答案 0 :(得分:6)
该文件大小超过2GB 。问题是new byte[OverTwoBillionAndSome]
是exceeding the limits。如果长度 2GB,则不会发生此错误(尽管可能仍然不建议将其完全读入内存)。
考虑流式传输数据。
答案 1 :(得分:0)
byte[] bytes = new byte[fs.Length];
2,885,760
超过2GB。你确定你的RAM有足够的空间吗?很可能不是,这就是你出现内存不足的原因。
即使RAM中有足够的空间,普通的32位也不能分配那么多的内存
答案 2 :(得分:0)
作为保罗said,问题是文件的大小。
但是使用.NET Framework 4.5,您可以使用<gcAllowVeryLargeObjects>
Element来支持您使用总大小超过2 GB的对象。
在64位平台上,启用大于2千兆字节的阵列 (GB)总大小。
您只需更改配置设置,例如;
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>