使用FileStream.Write时为什么会超出界限?

时间:2012-08-15 04:20:38

标签: c#

执行此代码时。

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

第一次运行它会有效。如果我第二次尝试运行它,我会收到此错误。

  

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

我没有承担这个错误。任何帮助表示赞赏。

2 个答案:

答案 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)超出界限。