私はこの簡単なコードを持っています:
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 になります。