Dropbox

自分用の覚書です。zipファイルの中に複数のzipファイルが有り、zip中zipの中から目的のテキストファイルを探し出して読み込むサンプル・コードです。特別なことは何もないですし、注釈は要らないでしょう。

#!/usr/bin/perl

my $fn_to_be_found = "target.txt";

if ($ARGV[0] =~ /zip$/i) {
	use File::Temp qw/tempfile/;
	use Archive::Zip;
	my $zip = Archive::Zip->new;
	$zip->read($ARGV[0]);
	my @members = $zip->membersMatching(/zip$/i);
	my $finish = 0;
	foreach my $m (@members) {
		my $fn = $m->fileName;
		print "zip in zip file: $fn\n";
		my ($temp_fh, $temp_filename) = tempfile(UNLINK => 1);
		print "Temporary file name: $temp_filename\n";
		$m->extractToFileHandle($temp_fh);
		$temp_fh->flush;
		my $zip2 = Archive::Zip->new;
		$zip2->read($temp_filename);
		my $m2 = $zip2->memberNamed($fn_to_be_found);
		if ($m2) {
			my $fn2 = $m2->fileName;
			print ">>$fn2\n";
			$file_contents = $m2->contents;
			$finish = 1;
		}
		close $temp_fh;
		if ($finish) {last;}
	}
}

# print $file_contents;
Trackback

no comment untill now

Add your comment now