6

含めたいファイルのリストをフィルタリングした後、Zipアーカイブを作成する必要があります。できれば、モジュールをWindowsとLinuxの両方で動作させたいと思います。

ファイルのリストをフィルタリングする必要があるので、外部プログラムを使用したくありません。( ActiveState PDKを使用して)Windowsでスクリプトを単一の実行可能ファイルにコンパイルできるように、外部依存関係も導入したくありません。

私がすでに試したこと

これまで、 CPANで見つかったArchive :: Zipを使用しましたが、非ASCIIファイル名を使用するWindowsマシンに大きなバグがあります。ファイル名は、Unicodeに変換されないため、アーカイブで破損します。

そのために提出されたバグレポートがありますが、それは10か月以上更新されておらず、モジュールのドキュメントでは開発者はかなり役に立ちません(「コンピューターを修正するかWindowsを取り除く」種類)。

更新:
brianとAlan Haggai Alaviからの説明のおかげで、Archive::Zipこれらのバグをすぐに取り除き、最終的にWindowsで完全に機能するzipモジュールを使用するのに十分な愛情が注がれているようです。

4

3 に答える 3

1

標準配布のArchive::Extractを試すことができます。Archive::Zip よりも優れているとは言えないかもしれませんが、ドキュメントによると、問題が発生した場合、システムでコマンドライン ツールを使用してファイルを解凍しようとします。これはおそらく Unix で最も堅牢ですが、Windows には zip アーカイブ ユーティリティがあり、コマンド ラインからアクセスできるはずです。さらに、Archive::Extract は、(理論的には) 他の多くの種類の圧縮を処理できます。

もちろん、Archive::Extract は単純にファイルが使用する圧縮の種類を把握し、それを適切な他のライブラリ (Archive::Zip など) に渡すことが判明する場合があります。

IO::Uncompress::Unzipを試すこともできます。これは、対応するIO::Compress::Zipで、解凍、読み取り、および再圧縮するだけです。絶対に必要な場合。繰り返しますが、これらがどれだけうまく機能するかはわかりませんが、それらすべて標準ライブラリの一部です。

于 2009-02-18T07:20:29.200 に答える