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% 稳定的:有时 7GB 左右的文件不会被读取,有时它们会;永远不会读取大约 10GB 的文件。

关于什么可能导致这种情况以及如何解决它的任何想法?


编辑:我已经尝试读取 1GB 的数据,但没有任何变化。但这里还有其他提示:如果文件太大,读取 1GB 字节的时间太短而无法真正读取;此外,如果我等待 HD 进入待机模式并且如果我尝试从小文件中读取 1GB,则 HD 退出待机,读取需要时间并成功,而如果我尝试使用大文件,则 HD 不会退出睡眠模式,读取需要几毫秒,并且再次全为零。

如果我用一些值初始化字节数组,这些值会在“假”读取后被擦除,并且我再次全为 0。

4

1 回答 1

0

鉴于相同的代码在某些驱动器上运行良好,并且您无法控制驱动器如何通过 USB 或其他方式工作,我想这只是一个硬件问题。尝试在另一台计算机上使用相同的驱动器运行程序。

于 2012-10-16T16:44:19.327 回答