[РЕШЕНО] Perl: чтение/запись бинарных файлов

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

[РЕШЕНО] Perl: чтение/запись бинарных файлов

Сообщение IMB »

Доброго дня!
Мне необходимо создать бинарный файл содержащий заголовок с некоторыми данными и tar-архив сжатый gzip-м.
Запись файла

Код:

open(OUT, '>:raw', $bic) or die "Failed open BIC-file $bic, $!"; print OUT pack("CCCC", 0, 0, 1, 0); open(IN, '<:raw', $file) or die "Can't open update file $file, $!"; while(<IN>) { my $buf; read(IN, $buf, 1024); print OUT $buf; } close IN; close OUT;

Чтение файла

Код:

open(IN, '<:raw', $bic) or die "Can't open update file $bic, $!"; read(IN, $info{'ver'}, 4); open(OUT, '>:raw', $file) or die "Failed open output file $file, $!"; while (<IN>) { my $buf; read(IN, $buf, 1024); print OUT $buf; } close OUT; close IN;

Всё замечательно записывается и считывается, но...
Проблема заключается в том, что после экстрагирования архива из бинарного файла он не является корректным tar.gz и имеет размер отличный от оригинального.
Вопрос - как корректно встроить архив в файл и выделить его из файла?
Спасибо.
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: [РЕШЕНО] Perl: чтение/запись бинарных файлов

Сообщение Женя Подсыпальников »

Во, тута примеры:
http://www.perlfect.com/articles/perlfile.shtml

- говорят, что read умеет возвращать количество считанного.
Ровно это количество и треба записывать (и, возможно, не принтовать) в шагах циклов :)

Более глубокие вопросы обответить, скорее всего, не смогу,
т.к. с этой крупы - только кашу да подкорм карасю парил :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21352
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [РЕШЕНО] Perl: чтение/запись бинарных файлов

Сообщение Bizdelnick »

А зачем тут while (<IN>)? Надо while (read(IN, $buf, 1024))
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: [РЕШЕНО] Perl: чтение/запись бинарных файлов

Сообщение IMB »

Ещё один работающий вариант:

Код:

until (eof(IN)) { my $buf; read(IN, $buf, 1024); print OUT $buf; }
Спасибо сказали: