ОБНАРУЖЕНА ПРОБЛЕМА. Я оставляю вопрос здесь, на случай, если другие столкнутся с той же проблемой, с которой столкнулся я.
Похоже, я обнаружил ошибку или странную функцию в WinZip 11. Когда я дважды щелкаю файл test2.zip, чтобы увидеть его содержимое, WinZip сообщает мне, что путь к файлу данных - «allcapsname» в нижнем регистре, но когда WinZip извлекает архив (из меню "Извлечь сюда", щелкнув правой кнопкой мыши), он фактически правильно создает каталог "ALLCAPSNAME". Я жаловался на проблему, которая, как мне казалось, у меня была с Archive :: Zip, и все время это была проблема WinZip. Спасибо всем, кто помог разобраться, в чем дело.
Оказывается, чтобы получить путь, который будет отображаться в файле WinZip при использовании Archive :: Tar, вам понадобится эта строка в вашем коде, чтобы заставить Archive :: Tar отклоняться от строгого соответствия POSIX: $ Archive :: Tar :: DO_NOT_USE_PREFIX = 1 ;
ОРИГИНАЛЬНЫЙ ВОПРОС: На данный момент я нашел несколько различных модулей Perl, которые, похоже, способны создавать файлы архивов ZIP, GZIP, TAR или TGZ из моих сценариев Perl. , но я не добился полного успеха ни от одного из них. Почему это так сложно? Это потому, что я на машине с Windows? (Я потратил около 4 часов на эту, казалось бы, простую задачу, и я действительно расстраиваюсь.)
Когда я попробовал Archive :: Tar, мне удалось создать архивный файл, но я не могу получить пути к любому из моих файлов, включенных в архив по той или иной причине. Я пробовал кучу разных вещей в своем коде, и мой tarball всегда показывал файлы с пустыми путями. (Я просматриваю свои архивы с помощью WinZip.)
Когда я попробовал Archive :: Zip, я добился большего успеха и получил фактический путь к каталогу к моим файлам, включенным в файл архива. Единственная проблема заключалась в том, что мой путь к моим файлам где-то по пути был изменен с верхнего регистра на нижний. Почему изменился регистр моего каталога? Я хочу, чтобы фактическое имя каталога оставалось таким, как было.
Я безуспешно пробовал несколько других модулей. Я даже не могу получить образец кода из Archive :: Builder даже для компиляции .
ОРИГИНАЛЬНОЕ ДОБАВЛЕНИЕ К ВОПРОСУ:
Я, наконец, смог создать минимальный исполняемый скрипт, который ясно демонстрирует мои две проблемы, которые я описал выше относительно Archive :: Zip и Archive :: Tar.
use strict;
use warnings;
use Archive::Zip;
use Archive::Tar;
print "Starting...\n";
# Archive::Zip Synopsis (relative path to directory)
my $zip1 = Archive::Zip->new();
$zip1->addFile( 'MyArchiveFiles/file1.txt' )
or die 'unable to add file to archive';
$zip1->writeToFileNamed('test1.zip');
# Archive::Zip Synopsis (with ALL CAPS DIRECTORY NAME)
my $zip2 = Archive::Zip->new();
$zip2->addFile( 'ALLCAPSNAME/file1.txt' )
or die 'unable to add file to archive';
$zip2->writeToFileNamed('test2.zip');
# Archive::Tar Synopsis (relative path to directory)
my $tar3 = Archive::Tar->new;
$tar3->add_files( 'MyArchiveFiles/file1.txt' )
or die 'unable to add file to archive';
$tar3->write('test3.tar');
print "Finished successfully!";
Этот скрипт создает 3 архива. Первый архив содержит файл данных с соответствующим путем "MyArchiveFiles \". Моя проблема возникает, когда имя моего каталога состоит только из заглавных букв. Второй архив содержит файл данных, но путь в архивном файле не "ALLCAPSNAME \", как ожидалось ... это "allcapsname \". Для меня это проблема. Почему он изменил регистр моего пути и как я могу заставить его оставить его в покое?
Третий архив содержит файл данных, но содержит пустой путь к этому файлу. Для меня это проблема. Мне нужен путь в архиве, чтобы при распаковке архива файлы извлекались в соответствующую структуру каталогов.
Archive::Zip
иArchive::Tar
? - person Sinan Ünür   schedule 21.10.2009site
области. Обратите внимание, что по умолчаниюsite/lib
появляется передlib
в@INC
, что означает, что используется последняя установленная версия библиотеки. По какой-то причине это может вас расстроить, но это не проблема Windows или Perl. - person Sinan Ünür   schedule 21.10.2009