2011-01-16 6 views
3

古いドライブから新しいドライブにファイルをコピーしようとしました。問題は、古いドライブがディスク上のいくつかの破損した場所を持っていて、これらのファイルのいくつかから読み込む試みが何らかの無限ループのように見えるということです。私がコピーしたいファイルにかなりの数の問題ファイルが散在していて、最初のファイルにヒットすると、アプリケーションは停止するまで何もしません。ディレクトリを再帰的に呼び出すカスタムプログラムを作成し、ファイルを1つずつコピーし、個々のコピー操作でポップアップするエラーをキャッチすることで、この問題を回避できることを期待していましたが、ちょうどそこに座ってそこに座ってそこに座ります。これを止める唯一の方法は、ハードドライブの問題を物理的にオフにすることです。プログラムを停止することはできません。File.Copyが破損したファイルでハングアップする

私はやり方についていくらか困惑しています。この種のエラーが発生すると、このプロセスを自動化する方法はありますか?誰にもこれに関する経験はありますか?

+0

これはカーネルモードの問題です。私はそれについてあなたができることは何もないと思います。 – SLaks

答えて

1

標準のSystem.IOクラス(Directory/DirectoryInfo/File/FileInfo)でコピーメソッドを使用すると思いますか?

FileStreamでファイルをコピーしようとしましたか?これらのエラーを防ぐために、ストリームのReadTimeout(stream.ReadTimeout)を設定することができます。このようにして、Read()操作に時間がかかりすぎると例外が発生します。また、ファイルを開くことができない場合は、エラーが発生します。

+0

小さなグーグルでは、ローカルのファイルシステムの読み込みではなく、ネットワーク読み込みでのみそのプロパティを使用できるとしています。あなたの方法を試してみると「このストリームでサポートされていないタイムアウト」エラーが表示され、すべてが失敗します。しかし、いいアイデア。 – SuperNES

+0

申し訳ありませんが、あなたが正しいです。どのように:FileStreamから派生します。 ReadTimeoutを実装し、読み込み(..)をオーバーライドすると例外がスローされます。 – CaptainPlanet

4

これは、HDが非常に壊れていて、HDが応答するのに非常に時間がかかる場合に発生します。通常、CRCエラーが発生するのは、これが起きたときで、たくさんのセクタが詰まっている大きなファイルである場合です。

セクタを表示する低レベルの方法を使用すると、いつ停止するかをより詳細に制御できます。

あなたが使いやすい(データ回復のためにGoogleを検索するだけで)必要なものを正確に行うように設計されていますが、プログラムがあります。一部の企業では、データを復旧する可能性が高い特別な機能が搭載されています。特別なアルゴリズムなどで高度なものもあります。

0
あなたはデータ復旧ツールのためではなく、いくつかのティップスは、C#で堅牢なコピー処理を取得するために外を見る必要があります

...

古いドライブが壊れていない場合、あなたは試してみてください(可能ではしがみついノイズをしがみつい) chkdskでファイルシステムを回復します。

chkdskで処理できない問題がある場合は、ddrescueなどのデータ復旧ツールやその他の(Googleの「データ復旧を試みる」または「破損したディスクからファイルをコピーする」)必要があります。

+0

これはUnixプログラムですか?私はWindows上にいる。 – SuperNES

+0

まずchkdskを試してみましたか?これは、ファイルシステムを修正するためのツールに組み込まれたウィンドウです。 – Matten

0

CBD(Copy Bad Disk)は、まさにあなたが必要としているものだと思います。ハングやストップのない不良セクタのファイルのコピー、読めないバイトのログ位置などです。

関連する問題