情况是这样的:我的系统 (Win XP Pro) 无法从 DVD 磁盘复制一个巨大的视频文件(大约 6 gigs),这可能是有缺陷的、有划痕的或其他任何东西,但可以用 mplayer 播放几帧虽然充满马赛克。当复制过程持续一定时间时,系统会中止工作并给我这个警告“发生循环冗余校验校验和错误”。然后复制的所有内容都被自动删除。
我在想一个 Perl 应用程序可能会解决这个问题。我的想法是这样的:我一次复制一兆的视频数据。如果发生读取错误,我让 perl 忽略这一特定的一兆数据,并继续复制视频的其余部分,一次仍然是一兆。
顺便说一句,我还注意到一些商业软件可以完成这项工作,但在试验中存在局限性。
以下脚本是我迄今为止尝试过的。它一次从有缺陷的 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 $_;
}
问题是我不知道如何实现这一点。希望这里有人能给我提示或线索。一如既往地感谢:)