Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字节流读取时出错:';System.ArgumentOutOfRangeException';_C#_Memorystream - Fatal编程技术网

C# 从字节流读取时出错:';System.ArgumentOutOfRangeException';

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

我在一个大约3.5兆的文件上打开了一个字节流。内容是数组中的Int32,每个数组由一个唯一的64位幻数分隔,然后是一些带有维度的Int32,后面是数据

我正在浏览1001的548数组文件的一半时,遇到以下错误:

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,哦,您是对的。我收回我以前的陈述。不仅可以将位置设置在流结束之外,而且设置负流位置会产生不同的错误消息。