Xpoint
   [напомнить пароль]

Archive::Zip - извлечение файлов

Метки: [без меток]
[удл]
2006-02-28 00:38:48 [обр] Алексей Егоров(0/10)[досье]

Если кто пользовался модулем Archive::Zip, подскажите как извлечь отдельный файл из архива, содержащего несколько файлов, в нужную папку. С документацией не совсем разобрался, пока получается извлечь все файлы в текущую папку.

use Archive::Zip;

$zip = Archive::Zip->new($zipfile);

$zip->extractTree();

Пробовал другие варианты типа: $zip->extractMember($memberName);, но ничего не получается. Покажите кто-нибудь понятный пример.

спустя 5 часов [обр] Роман Чемисов(36/350)[досье]
Алексей Егоров[досье]
Например, так:
use strict;
use Archive::Zip;

my $zipfile = "archive.zip";
my $zip = Archive::Zip->new($zipfile);
my @members = $zip->members();
$zip->extractMember($members[1], "C:/Zip/filename.txt");
спустя 6 часов [обр] Алексей Егоров(0/10)[досье]
Роман Чемисов[досье] Не могли бы Вы пояснить, что такое Member в котексте модуля, я из-за этого момента не могу многое понять.
спустя 7 минут [обр] Алексей Севрюков(61/1292)[досье]
спустя 4 минуты [обр] Алексей Севрюков(61/1292)[досье]
Алексей Егоров[досье] Полагаю что members возвращает список файлов в архиве.
Вот нашел описание: Members.
спустя 1 час 28 минут [обр] Роман Чемисов(36/350)[досье]
Алексей Егоров[досье]
В смысле? Member это участник архива я полагаю...
спустя 2 часа 52 минуты [обр] Алексей Егоров(0/10)[досье]

@members - возвращает некий массив ссылок вида примерно такого: Archive::Zip::ZipFileMember=HASH(0x9ebb740)Archive::Zip::ZipFileMember=HASH(0xa380b70)Archive::Zip::ZipFileMember=HASH(0x9ec7634)Archive::Zip::ZipFileMember=HASH(0x9eb9138)Archive::Zip::ZipFileMember=HASH(0x9ebb7e4)

Т.е получается, что если мне надо вытащить файл с определённым именем из архива с несколькими файлами, мне нужно как-то сформировать member из имени файла, а затем уже извлекать этого member?

спустя 50 минут [обр] Алексей Егоров(0/10)[досье]
Получилось так:
use strict;
use Archive::Zip;

my $zipfile = "archive.zip";
my $textfile = "file.txt";
my $zip = Archive::Zip->new($zipfile);
my $member = $zip->memberNamed($textfile);
$zip->extractMember($member, "C:/Zip/$textfile");
спустя 44 минуты [обр] Роман Чемисов(36/350)[досье]
Алексей Егоров[досье]
Ну естественно. Member это же объект. У него есть свои свойства и методы.
Powered by POEM™ Engine Copyright © 2002-2005