File.Copy挂起损坏的文件

时间:2011-01-16 19:15:54

标签: c# hard-drive .net

我一直在尝试将文件从旧驱动器复制到新驱动器。问题是,旧驱动器(我只能假设)磁盘上有一些损坏的位置,并且任何尝试从这些文件中读取的任何尝试都会导致看起来像某种无限循环。在我要复制的文件中有很多问题文件,当它碰到第一个时,我的应用程序只是在那里做任何事情,直到我停止它。我希望通过编写一个自定义程序来遍历目录,逐个复制文件,并捕获在单个复制操作中弹出的任何错误,我希望能解决这个问题,但它永远不会发生错误 - - 只是坐在那里然后坐在那里。阻止这种情况的唯一方法是在物理上关闭问题硬盘驱动器 - 无法通过尝试结束该过程或类似的任何事情来停止程序。

我有点疑惑如何继续。鉴于这种错误将要发生,有没有办法自动化这个过程?有没有人有这方面的经验?

5 个答案:

答案 0 :(得分:4)

当HD严重损坏并且HD需要很长时间才能响应时,可能会发生这种情况。通常当你是CRC错误时,就会发生这种情况,并且在大量文件被搞砸了。

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

虽然有些程序旨在完全按照您的要求使用,但可能更容易使用(只需搜索谷歌进行数据恢复)。有些将具有更有可能恢复数据的特殊功能。有些是非常先进的特殊算法等。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你应该注意一个数据恢复工具而不是一些tipp来在C#中获得一个强大的复制过程......

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

如果chkdsk无法处理问题,您需要一个数据恢复工具,例如ddrescue或任何其他工具(尝试google'数据恢复'或者从损坏的光盘复制文件& #39;)

答案 3 :(得分:0)

我认为CBD(复制坏磁盘)正是您所需要的:在坏扇区上复制文件而不挂起或停止,记录不可读字节的位置等等。

答案 4 :(得分:0)

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