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

2 番目の引数は、書き込み先のファイルのオフセットではなく、コピー元のバイト配列のオフセットを指定します。事実上、最初のパスで 8192 バイトをコピーし、2 番目のパスで FileStream に 8193 番目のバイトから始まる BA からコピーするように指示していますが、これは範囲外であるため、もちろんクラッシュします。MSDN のドキュメントを参照してください。

FS.Write に 0 を渡して、配列の先頭から開始するように指示するだけで修正できます。

于 2012-08-15T04:33:39.383 に答える
0

配列の「境界」を超えるアドレスのデータにアクセスしようとしているだけです。

簡単に言えば、10 要素の配列があるとします。「5 番目の要素から始めて、次の 10 要素を教えてください」と尋ねたら、何を期待しますか? エラーをスローして、オフセット (この場合は 5 番目の要素) と長さ (この場合は 10) が範囲外であることを通知します。

于 2012-08-15T04:27:15.337 に答える