情况是这样的:我的系统(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 $_;
}
问题是我不知道如何实现这个目标。希望有人在这里可以给我一个提示或线索。总是如此谢谢:)