我有这个简单的代码:
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。
答案 0 :(得分:0)
考虑到相同的代码可以正常运行某些驱动器,并且您无法控制驱动器如何通过USB或其他任何工作,我想这只是一个硬件问题。尝试在另一台计算机上使用相同的驱动器运行程序。