3

当我执行此代码时。

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();

它会在我第一次运行时工作。如果我再次尝试运行它,我会收到此错误。

数组的偏移量和长度超出范围或计数大于从索引到源集合末尾的元素数。

我不理解这个错误。任何帮助表示赞赏。

4

2 回答 2

8

你传递你的论点是错误的。在:

FS.Write(BA, (int)end, BA.Length);

第二个参数指定要复制的字节数组中的偏移量,而不是您正在写入的文件中的偏移量。实际上,您在第一遍中复制了 8192 个字节,在第二遍中,您告诉 FileStream 从第 8193 个字节开始从 BA 复制,这当然会崩溃,因为它超出了范围。请参阅MSDN 文档

您可以简单地通过将 0 传递给 FS.Write 来修复它,告诉它从数组的开头开始。

于 2012-08-15T04:33:39.383 回答
0

这只是说您正在尝试访问超出数组“边界”的地址的数据。

简单来说,假设您有一个包含 10 个元素的数组。如果你问“从第 5 个元素开始,给我接下来的 10 个元素”,你会期待什么?它会抛出一个错误并告诉你偏移量(在这种情况下是第 5 个元素)和长度(在这种情况下是 10)超出范围。

于 2012-08-15T04:27:15.337 回答