执行此代码时。
Random R = new Random();
byte[] BA = new byte[8192];
R.NextBytes(BA);
FileStream FS = new FileStream(@"D:\Test.txt", FileMode.Append);
long end = FS.Seek(0, SeekOrigin.End);
if (FS.CanWrite == true)
{
FS.Write(BA, (int)end, BA.Length);
FS.Flush();
}
FS.Close();
第一次运行它会有效。如果我第二次尝试运行它,我会收到此错误。
偏移和长度超出数组范围或计数更大 比从索引到源头的元素数量 集合。
我没有承担这个错误。任何帮助表示赞赏。
答案 0 :(得分:6)
你错误地传递了你的论点。在:
FS.Write(BA, (int)end, BA.Length);
第二个参数指定要复制的字节数组中的偏移量,而不是您要写入的文件中的偏移量。实际上你在第一遍中复制了8192个字节,而在第二个传递中,你告诉FileStream从8193rd字节开始从BA复制,这当然会崩溃,因为它已经崩溃了界限。请参阅MSDN docs。
你可以简单地通过将0传递给FS.Write来修复它,告诉它从数组的开头开始。
答案 1 :(得分:0)
这只是说你试图访问超出数组“边界”的地址的数据。
简单来说,假设你有一个包含10个元素的数组。如果你问“从第5个元素开始并给我接下来的10个元素,你会期待什么?”它将抛出一个错误并告诉你偏移量(在这种情况下是第5个元素)和长度(在这种情况下为10)超出界限。