問題が見つかりました。 ただし、他の人が私が遭遇した同じ問題に遭遇した場合に備えて、ここで質問を残しています.
WinZip 11 でバグまたは奇妙な機能に遭遇したようです。test2.zip ファイルをダブルクリックしてその内容を表示すると、WinZip はデータ ファイルへのパスが小文字の「allcapsname」であると表示しますが、WinZip が抽出するとアーカイブ (右クリックの [Extract to here] メニューから) を実行すると、実際には「ALLCAPSNAME」ディレクトリが適切に作成されます。Archive::Zip で発生していると思われる問題について不平を言っていましたが、それはずっと WinZip の問題でした。何が間違っていたのかを理解するのを手伝ってくれたすべての人に感謝します。
Archive::Tar の使用中に WinZip ファイルに表示されるパスを取得するには、コードに次の行が必要であり、Archive::Tar を厳密な POSIX 準拠から逸脱させる必要があります: $Archive::Tar::DO_NOT_USE_PREFIX = 1 ;
元の質問: これまでに、Perl スクリプト内から ZIP、GZIP、TAR、または TGZ アーカイブ ファイルを作成できるように見えるさまざまな Perl モジュールをいくつか見つけましたが、実際にはそれらのいずれからも完全に成功したわけではありません。 . なぜこれが難しいのですか?Windowsマシンを使用しているからですか?(これまでのところ、この一見単純なタスクに約 4 時間を無駄にしており、本当にイライラしています。)
Archive::Tarを試したところ、アーカイブ ファイルの作成に成功しましたが、何らかの理由で tarball に含まれるファイルへのパスを取得できませんでした。私は自分のコードでさまざまなことを試しましたが、tarball には常に空のパスを持つファイルが表示されていました。(WinZip を使用して tarball を見ています。)
Archive::Zipを試したところ、より多くの成功が得られ、アーカイブ ファイルに含まれるファイルへの実際のディレクトリ パスを取得できました。唯一の問題は、ファイルへのパスが途中で大文字から小文字に変更されたことです。ディレクトリの大文字と小文字が変更されたのはなぜですか? 実際のディレクトリ名をそのままにしておきたい。
成功せずに他のいくつかのモジュールを試しました。Archive::Builderからサンプル コードを取得してコンパイルすること さえできません。
元の質問の補遺:
Archive::Zip と Archive::Tar に関して上記で説明した 2 つの問題を明確に示す最小限の実行可能スクリプトを作成することができました。
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\」という適切なパスを持つデータ ファイルが含まれています。ディレクトリ名がすべて大文字の場合に問題が発生します。2 番目のアーカイブにはデータ ファイルが含まれていますが、アーカイブ ファイル内のパスは予想どおり「ALLCAPSNAME\」ではなく、「allcapsname\」です。これは私にとって問題です。なぜそれは私のパスのケースを変更したのですか?どうすればそれをそのままにしておくことができますか?
3 番目のアーカイブにはデータ ファイルが含まれていますが、そのファイルの空のパスが含まれています。これは私にとって問題です。アーカイブを解凍すると、ファイルが適切なディレクトリ構造に抽出されるように、パスがアーカイブにある必要があります。