2017-06-02 106 views
0

我已经打开一个约3.5兆字节的文件上的字节流。内容是Int32在数组中的内容,每个数组由一个唯一的64位幻数分隔,然后是一些带有维数的Int32s,随后是数据。从字节流中读取时出错:'System.ArgumentOutOfRangeException'

我对通过文件半路上,阵列548的1001,当我得到这个错误:

Exception thrown: 'System.ArgumentOutOfRangeException' in mscorlib.dll 

Additional information: MemoryStream length must be non-negative and less than 2^31 - 1 - origin. 

在这条线上出现的错误:

S.Position = ByteStart + 8 

S是流。 ByteStart是873552.加法产生正确的值873560.该文件比这长得多。任何人都可以提供一个建议,为什么我可能会得到这个错误?

+1

您只描述了部分问题,并且描述了您的想法。可能发生的事情与您的想法有很大不同。因此,请发布[mcve](强调“最小”部分。) –

+0

此错误表示您将Position设置为大于int.MaxValue(2147483647)的值。 – Evk

+0

@evk,不,这不是错误信息的说法;-)(长度必须是“非负值”,小于“2^31 - 1 - 原点”) – elgonzo

回答

0

好的,所以这似乎是一个线程问题。我注意到,当我将鼠标悬停在变量上时,我获得了一组值,并在Watch窗口中显示了一组不同的值,这些值都不是实际值。无论出于何种原因,ByteStart在某些时候成为了一个超大值,尽管如果我只是逐步追踪代码,这似乎并没有发生,但它只发生在它自己正在运行的情况下。奇怪的!