我有这个简单的代码:
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% 稳定的:有时 7GB 左右的文件不会被读取,有时它们会;永远不会读取大约 10GB 的文件。
关于什么可能导致这种情况以及如何解决它的任何想法?
编辑:我已经尝试读取 1GB 的数据,但没有任何变化。但这里还有其他提示:如果文件太大,读取 1GB 字节的时间太短而无法真正读取;此外,如果我等待 HD 进入待机模式并且如果我尝试从小文件中读取 1GB,则 HD 退出待机,读取需要时间并成功,而如果我尝试使用大文件,则 HD 不会退出睡眠模式,读取需要几毫秒,并且再次全为零。
如果我用一些值初始化字节数组,这些值会在“假”读取后被擦除,并且我再次全为 0。