大文件:当它们在外部HD上时无法读取

时间:2012-10-16 15:16:10

标签: c# io filestream hard-drive

我有这个简单的代码:

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。

如果我尝试相同类型但较小的文件,一切正常。如果我在另一台外置高清上尝试相同的大文件,那么一切都很好。更令人难以置信的是,如果我尝试相同的大文件并使用相同的外部高清,这给我带来了问题,但通过eSATA连接一切正常

两个HD都是NTFS,并且在有问题的HD上描述的行为不是100%稳定的:有时大约7GB的文件不会被读取,有时它们是;永远不会读取大约10GB的文件。

有什么可以导致这个以及如何解决它的想法?


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

如果我用一些值初始化字节数组,那些值在“假”读数之后被删除,并且我再次全部为0。

1 个答案:

答案 0 :(得分:0)

考虑到相同的代码可以正常运行某些驱动器,并且您无法控制驱动器如何通过USB或其他任何工作,我想这只是一个硬件问题。尝试在另一台计算机上使用相同的驱动器运行程序。