C# 为什么我在使用FileStream.Write时会越界?
当我执行这个代码时C# 为什么我在使用FileStream.Write时会越界?,c#,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)
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();
我第一次运行它时,它就会工作。如果我第二次尝试运行它,就会出现此错误
偏移量和长度超出了数组的界限或计数更大
大于从索引到源结尾的元素数
收藏
我不理解这个错误。非常感谢您的帮助。这只是说您正在尝试访问超出数组“边界”的地址上的数据
简单地说,假设您有一个由10个元素组成的数组。如果你问“从第5个元素开始,给我接下来的10个元素”,你会想到什么?它会抛出一个错误,告诉你偏移量(本例中的第5个元素)和长度(本例中的10个元素)超出范围。你的参数传递错误。在:
FS.Write(BA, (int)end, BA.Length);
第二个参数指定要从中复制的字节数组中的偏移量,而不是要写入的文件中的偏移量。实际上,您在第一个过程中复制了8192个字节,在第二个过程中,您告诉FileStream从第8193个字节开始从BA复制,这当然会崩溃,因为它超出了范围。看
只需将0传递给FS.Write,告诉它从数组的开头开始,就可以修复它