3

我一直在尝试将文件从旧驱动器复制到新驱动器。问题是,旧驱动器(我只能假设)磁盘上有一些损坏的地方,任何从其中一些文件中读取的尝试都会导致似乎是某种无限循环。在我要复制的文件中散布着很多问题文件,当它遇到第一个时,我的应用程序只是坐在那里什么都不做,直到我停止它。我希望我可以通过编写一个自定义程序来递归遍历目录,一个一个地复制文件,并捕获在单个复制操作中弹出的任何错误来解决这个问题,但它永远不会引发错误 - -只是坐在那里,坐在那里,坐在那里。阻止这种情况的唯一方法是物理关闭有问题的硬盘驱动器 - 可以'

我对如何继续感到有些困惑。鉴于这种错误将会发生,有没有办法自动化这个过程?有人对这个有经验么?

4

5 回答 5

4

当 HD 严重损坏并且 HD 需要很长时间才能响应时,可能会发生这种情况。通常,当您遇到 CRC 错误时,就会发生这种情况,并且发生在带有很多扇区的大文件上。

您应该考虑使用较低级别的查看扇区的方法,然后您将可以更好地控制何时停止。

虽然有些程序旨在完全按照您想要的方式执行,但可能更易于使用(只需搜索 google 以获取数据恢复)。有些将具有更有可能恢复您的数据的特殊功能。有些非常先进,具有特殊的算法等。

于 2011-01-16T19:20:57.423 回答
1

我猜你在标准 System.IO 类(Directory / DirectoryInfo / File / FileInfo)上使用复制方法?

您是否尝试过使用 FileStream 复制文件?为了防止这些错误,您可以在流上设置 ReadTimeout (stream.ReadTimeout)。这样,当 Read() 操作花费太长时间时,您会得到异常。如果无法打开文件,您也应该得到错误。

于 2011-01-16T19:24:26.923 回答
0

你应该寻找一个数据恢复工具,而不是一些技巧来在 C# 中获得一个强大的复制过程......

如果您的旧驱动器没有损坏(发出叮当声),那么您应该尝试使用chkdsk恢复文件系统。

如果有 chkdsk 无法处理的问题,您需要一个数据恢复工具,如 ddrescue或任何其他工具(尝试谷歌“数据恢复”或“从损坏的磁盘复制文件”)。

于 2011-01-16T19:21:30.860 回答
0

我认为 CBD(Copy Bad Disk)正是您所需要的:在坏扇区上复制文件而不会挂起或停止,不可读字节的日志位置等。

于 2013-02-26T06:12:59.070 回答
0

对于像我这样偶然发现这个旧线程的人,在通过无线网络连接复制一些较大的文件(~1GB)时遇到了类似的问题:我的 WLAN 适配器有一个驱动程序设置“多媒体/游戏环境”。当此设置为“启用”时,大文件在通过 WLAN 复制时通常会损坏。将“多媒体/游戏环境”设置为“禁用”后,问题就消失了。

于 2020-07-10T13:56:35.220 回答