0

状況は次のとおりです。私のシステム(Win XP Pro)は、DVDディスクから巨大なビデオファイル(約6ギガ)をコピーできません。これは、欠陥や傷などがありますが、数フレームのmplayerで再生できます。でもモザイクだらけ。コピープロセスが一定時間続くと、システムはその作業を中止し、「巡回冗長検査のチェックサムエラーが発生しました」という警告を表示します。そして、コピーされたものはすべて自動的に削除されました。

Perlアプリで問題が解決するかもしれないと思っています。私の考えはこれです:私は一度に1メガずつビデオデータをコピーします。読み取りエラーが発生した場合は、perlにこの特定の1メガのデータを無視させ、残りのビデオを一度に1メガずつコピーし続けます。

ちなみに、いくつかの商用ソフトウェアがその仕事をすることができることにも気づきましたが、試験には制限があります。

次のスクリプトは、私がこれまでに試したものです。欠陥のあるDVDディスクから一度に1メガずつデータをコピーしますが、WinXPのように失敗します。唯一の違いは、perlはすでにコピーされたものを削除しないことです。私の場合、約900メガバイトのビデオデータをハードディスクにコピーしましたが、ビデオのこの900メガバイトの部分は引き続きmplayerで再生できます。しかし、私の目標は、良いものすべて、多数派をコピーし、悪いものすべて、少数派だけを残すことです。

    use strict;
    use warnings;

    $/ = \1_048_576;  

    open my $in, "<", 'D:\tobecopied.mkv' or die $!;
        binmode $in;
    open my $out, ">", 'E:\copied.mkv' or die $!;
        binmode $out;

    while (<$in>) {
        print $out $_;
    }

問題は、これを達成する方法がわからないことです。ここの誰かが私にヒントや手がかりを与えてくれることを願っています。いつものようにありがとう:)

4

1 に答える 1

5

ddrescueが必要です。その車輪をひどく再発明する必要はありません。

readlinesysread一部の読み取りが失敗した後にピックアップするためにオフセットを指定できる場合は、代わりに使用する必要があります。

于 2010-07-16T15:15:27.477 に答える