如何使用Perl将数据从有缺陷的DVD复制到我的硬盘?

Mik*_*ke 0 perl checksum copy crc

情况是这样的:我的系统(Win XP Pro)无法从DVD磁盘复制一个巨大的视频文件(大约6演出),这可能是有缺陷的,有划痕的或者其他什么但可以使用带有几帧的mplayer播放虽然充满马赛克.当复制过程持续一段时间后,系统将中止工作并向我发出警告"发生循环冗余校验校验和错误".然后复制的所有内容都会自动删除.

我在想Perl应用可能会解决这个问题.我的想法是:我一次复制一兆的视频数据.如果发生读取错误,我让perl忽略这个特定的1兆的数据,并且一次复制其余的视频仍然是一个兆字节.

顺便说一句,我也注意到一些商业软件可以完成这项工作,但试验中存在局限性.

以下脚本是我到目前为止尝试过的.它一次从有缺陷的DVD磁盘复制数据一兆,但它像Win XP一样失败.唯一的区别是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 $_;
    }
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何实现这一目标.希望有人在这里可以给我一个提示或线索.总是如此谢谢:)

dax*_*xim 5

你想要ddrescue,不需要重新发明那个轮子.

readline从你的程序不是很低级别,必须使用,sysread而在指定读取失败后可以指定偏移量.