3

私はこの簡単なコードを持っています:

using(FileStream fs = new FileStream(@"E:\test.bin", FileMode.Open, FileAccess.Read, FileShare.Read)
{
    byte[] bytes = new byte[100];
    int n = fileStream.Read(bytes, 0, bytes.Length);
}

これは通常、期待どおりに機能し、ファイルの先頭にバイト配列を返します。

信じられないことに、USB 経由で接続された外部 HD にある非常に大きなファイル (~7GB) を読み込もうとすると、返された配列のバイトはすべてゼロ で、 n は 100 です。

同じタイプの小さいファイルを試してみると、すべて正常に動作します。私が持っている別の外付けHDで同じ大きなファイルを試しても、すべて問題ありません。さらに信じられないことに、同じ大きなファイルを試して同じ外付け HD を使用すると、問題が発生しますが、eSATA 経由で接続するとすべて正常に動作します

どちらの HD も NTFS であり、問​​題のある HD で説明されている動作は 100% 安定しているわけではありません。約 10GB のファイルは読み取られません。

これを引き起こす原因と解決方法について何か考えはありますか?


編集: 1 GB のデータを読み取ってみましたが、何も変わりません。しかし、ここには別のヒントがあります。ファイルが大きすぎる場合、1GB のバイトを読み取る時間は短すぎて実際の読み取りにはなりません。さらに、HD がスタンバイ モードになるのを待ち、小さなファイルから 1GB を読み込もうとすると、HD はスタンバイを終了します。読み込みには時間がかかり、成功しますが、大きなファイルを試しても、HD はスリープ モードを終了しません。 、読み取りには数ミリ秒かかり、再びすべてゼロになります。

バイト配列をいくつかの値で初期化すると、それらの値は「偽の」読み取り後に消去され、再びすべて 0 になります。

4

1 に答える 1

0

同じコードが一部のドライブで正常に機能し、USBなどを介してドライブがどのように機能するかを制御できないという事実を考えると、これは単なるハードウェアの問題だと思います。別のコンピューターで同じドライブを使用してプログラムを実行してみてください。

于 2012-10-16T16:44:19.327 に答える