C# FileStream get error算术运算导致溢出

C# FileStream get error算术运算导致溢出,c#,C#,我尝试使用此方法从文件中获取字节 byte[] b1; using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { b1= new byte[fs.Length]; int bytesRead = fs.Read(b1, 0, b1.Length); } 但是当我用文

我尝试使用此方法从文件中获取字节

byte[] b1;
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    b1= new byte[fs.Length];
                    int bytesRead = fs.Read(b1, 0, b1.Length);
                } 
但是当我用文件大小=4.9GB测试它时,它的抛出异常是
算术运算导致溢出。字节[]的最大长度只能为2147483647。尝试创建一个长度超过该长度的
b字节[]
将导致抛出
溢出异常
,基本上,为了检查解决方案中的算术溢出异常,您可以在项目属性->构建->高级->检查算术溢出/下溢中进行设置

但此属性可能会在运行时导致性能问题。因此,在使用整数时必须小心。如上所述,您的文件大小为4.9GB,因此490000000>2147483647(您可以使用c#中的Int32.MaxValue进行检查)


恢复,,当您使用filestream时,您必须检查输入参数,并通过添加一些try-catch块来预期这些类型的问题,以避免未处理的异常,这些异常会给用户带来不好的体验。

如果您在连接2个数组时遇到问题,那么在一个缓冲区中读取4.9GB可能也会有问题。第一个是否应该句子应该是“…最大长度为…”?还值得指出的是,.Net允许最大对象大小为2GB,即使对于.Net 4.5也是如此,除非
gcAllowVeryLargeObjects
配置为
true
。看见因此,您面临两个限制:元素的数量和数组的总大小。