Ситуация такова: моя система (Win XP Pro) не может скопировать огромный видеофайл (около 6 гигабайт) с диска DVD, который может быть поврежден, поцарапан или что-то еще, но который может быть воспроизведен с помощью 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 $_;
}
Проблема в том, что я не знаю, как этого добиться. Надеюсь, что кто-то здесь может дать мне подсказку или подсказку. Спасибо, как всегда :)