C# 从字节流读取时出错:';System.ArgumentOutOfRangeException';
我在一个大约3.5兆的文件上打开了一个字节流。内容是数组中的Int32,每个数组由一个唯一的64位幻数分隔,然后是一些带有维度的Int32,后面是数据 我正在浏览1001的548数组文件的一半时,遇到以下错误:C# 从字节流读取时出错:';System.ArgumentOutOfRangeException';,c#,memorystream,C#,Memorystream,我在一个大约3.5兆的文件上打开了一个字节流。内容是数组中的Int32,每个数组由一个唯一的64位幻数分隔,然后是一些带有维度的Int32,后面是数据 我正在浏览1001的548数组文件的一半时,遇到以下错误: Exception thrown: 'System.ArgumentOutOfRangeException' in mscorlib.dll Additional information: MemoryStream length must be non-negative and les
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。这个文件比这个长得多。有人能就我为什么会出现此错误提供建议吗?好的,所以这似乎是一个线程问题。我注意到,当我将鼠标悬停在变量上时,我得到了一组值,在“监视”窗口中得到了一组不同的值,这两个值都不是实际值。不管出于什么原因,ByteStart在某个时候变成了一个超大值,尽管如果我只是一步一步地跟踪代码,这似乎不会发生,但它只有在它自己运行时才会发生。奇怪 您只描述了问题的一部分,并且描述了您认为正在发生的事情。可能发生的事情与你所认为的完全不同。因此,请发布一条(强调“最小”部分)。此错误表示您正在将位置设置为大于int.MaxValue(2147483647)的值。@evk,不,这不是错误消息所说的;-)(长度必须为非负数
且小于2^31-1-原点
)@elgonzo您可以自己尝试(或查看MemoryStream.Position的源代码
)。至于您的评论:您可以将Position设置为大于流长度的值,它不会导致任何异常。@Evk,哦,您是对的。我收回我以前的陈述。不仅可以将位置设置在流结束之外,而且设置负流位置会产生不同的错误消息。