English 中文(简体)
在保留档案途径时,我如何使用Perl在Win32存档?
原标题:How do I archive a set of files using Perl on Win32 while retaining file paths?
  • 时间:2009-10-20 21:14:23
  •  标签:

<><>>> PROBLEM FOUND. 我在此留待这个问题,但是,如果其他人陷入同样的问题,我就跑了。

就像我在温泽西11年遭遇的ug或 we。 当我把试卷2.zip翻一番看其内容时,WinZip告诉我,在较低情况下,数据档案的路径是“所有名字”,但当WinZip(从右翼外推到这里的菜u)提取档案时,它实际上会适当地制作“所有CAPSNAME”目录。 我在抱怨一个问题时认为我有档案:Zip,整个时间是WinZip的问题。 感谢所有帮助揭露错误的人。

Turns out that to get the path to show up in WinZip file while using Archive::Tar, you need this line in your code to force Archive::Tar to deviate from strict POSIX compliance: $Archive::Tar::DO_NOT_USE_PREFIX = 1;

ORIGINAL QUESTION: I ve found a handful of various Perl modules so far that appear to be capable of creating ZIP or GZIP or TAR or TGZ archive files from within my Perl scripts, but I haven t actually had complete success from any of them. Why is this so hard? Is it because I m on a Windows machine? (I ve wasted about 4 hours on this seemingly simple task so far and am really getting frustrated.)

当我尝试 我成功地建立了档案档案,但出于某种原因,我无法接触到我列入警钟的任何档案。 我在我的法典中尝试了一批不同的东西,我的tar球总是用空洞的路向那里的档案显示。 (一) 利用WinZip检查我的气球。

当我尝试Archive:Zip 我取得了更多的成功,而且我走了实际的目录路,把我的文件列入档案。 唯一的问题是,我向我的档案的道路是,从上一级案件到下级案件的道路上有些地方。 为什么它改变了我的主人的情况? 我希望,实际的目录名称与时俱进。

我尝试了一些其他单元,但没有任何成功。 我甚至可以从Archive:Builder到汇编。

<><>>> 生物质问题

最后,我能够制作一份最低限度的可执行文字,明确表明我上文提到的关于档案的2个问题:Zip和档案:Tar。

use strict;
use warnings;
use Archive::Zip;
use Archive::Tar;

print "Starting...
";

# 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”。 我的问题是,当我的名字是所有帽子时。 第二份档案中载有数据档案,但档案档案档案中的道路并非“预期的”。 这对我来说是一个问题。 为什么它改变了我的道路,我怎么能够迫使它单独离开吗?

第三个档案中载有数据档案,但载有该档案的空洞途径。 这对我来说是一个问题。 我需要把档案放在档案中,这样,当我不整理档案时,档案就会输入适当的目录结构。

最佳回答

回答是WinZip11的问题。 因此,如果你重新审视你的档案:使用WinZip的Zip档案,那么就忽视了这样一个事实,即所有上层案件路径都改变为WinZip GUI的所有下级案件,因为如果你实际上不这样做,道路就会像预期的那样高。

就档案而言:在温扎伊,根本看不到一条道路的Tar问题,你需要强迫档案:Tar 不要严格地遵守布局,然后你将看到温扎伊的道路:

$Archive::Tar::DO_NOT_USE_PREFIX = 1;
问题回答

你是否有一个具体问题? 下述法典在Win32上完全有效:

#!/usr/bin/perl

use strict;
use warnings;

use Archive::Zip;
use File::Find;

my $zip = Archive::Zip->new;

find(&wanted, $ENV{TEMP});

$zip->writeToFileNamed( test.zip );

sub wanted {
    return unless /.txt$/;
    $zip->addFile($File::Find::name);
}

让我们管理:

C:Temp> arc

C:Temp> unzip -l test.zip

Archive:  test.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
      240  10-16-09 19:19   /Temp/cpan_install_Wb7z.txt
     2401  10-18-09 23:09   /Temp/perldoc_perlfunc_T4adbd85e_aec9c.txt
     2401  10-18-09 23:09   /Temp/perldoc_perlfunc_T4adbd872_bc437.txt
     2718  10-19-09 10:04   /Temp/perldoc_perlfunc_T4adc71e7_f4c64.txt
     2718  10-19-09 10:04   /Temp/perldoc_perlfunc_T4adc71f2_bf08d.txt
     2718  10-19-09 10:04   /Temp/perldoc_perlfunc_T4adc720a_a5c6a.txt
    29188  10-19-09 10:05   /Temp/perldoc_perlfunc_T4adc7226_bd834.txt
     6949  10-20-09 17:31   /Temp/perldoc_perlfunc_T4ade2c1f_d0cf8.txt
     6949  10-20-09 17:32   /Temp/perldoc_perlfunc_T4ade2c50_f2040.txt
   106763  10-19-09 10:00   /Temp/perldoc_perlop_T4adc7103_f4cab.txt
    67948  10-18-09 23:07   /Temp/perldoc_perlvar_T4adbd7d7_d8cda.txt
 --------                   -------
   230993                   11 files

Ditto for Archive:Tar

<>Update: 查明档案中以正确方式添加档案的任何疑问,请注意:

C:Temp> dir *.txt
 Volume in drive C is ****
 Volume Serial Number is ****-****

 Directory of C:Temp

2009/10/16  07:19 PM               240 cpan_install_wb7z.txt
2009/10/18  11:09 PM             2,401 perldoc_perlfunc_t4adbd85e_aec9c.txt
2009/10/18  11:09 PM             2,401 perldoc_perlfunc_t4adbd872_bc437.txt
...

Speaking as the author of Archive:Builder, 这几乎肯定不是你想要的。

其目的是利用磁盘和密码生成的内容生成ZIP文档,而不是存档。

我听到你对简单事情的沮丧,有时是 per忙地打赢。 如果其他所有因素都失败,那么就只得到7-齐p的指挥系统,你想要做些什么,然后才需要一个系统。

我将回答你在职位上提供的新信息中提出的要点。 我拿着你的话。 成果如下:

C:Tempa> unzip -l test1.zip
Archive:  test1.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  10-21-09 13:03   MyArchiveFiles/file1.txt
 --------                   -------
        0                   1 file
C:Tempad> unzip ../test1.zip
Archive:  ../test1.zip
 extracting: MyArchiveFiles/file1.txt

C:Tempad> dir /s
...
 Directory of C:Tempad

2009/10/21  01:09 PM              MyArchiveFiles

 Directory of C:TempadMyArchiveFiles

2009/10/21  01:03 PM                 0 file1.txt
C:Tempad> unzip ..	est2.zip
Archive:  ..	est2.zip
 extracting: ALLCAPSNAME/file1.txt

C:Tempad> dir /s

 Directory of C:Tempad

2009/10/21  01:11 PM              ALLCAPSNAME
2009/10/21  01:09 PM              MyArchiveFiles

 Directory of C:TempadALLCAPSNAME

2009/10/21  01:07 PM                 0 file1.txt
C:Tempad> tar -xvf ..	est3.tar
tar: Record size = 3 blocks
MyArchiveFiles/file1.txt

C:Tempad> dir /s

2009/10/21  01:13 PM              MyArchiveFiles

 Directory of C:TempadMyArchiveFiles

2009/10/21  01:03 PM                 0 file1.txt

我从<代码>dir中删除了某些多余产出,但我希望这一劳永逸地表明,无论你经历过什么问题,都不是由于Windows或 Perl或。 档案:TarArchive:Zip

本记录可以更正。

C:Temp> perl -v

This is perl, v5.10.1 built for MSWin32-x86-multi-thread
(with 2 registered patches, see perl -V for more detail)

Copyright 1987-2009, Larry Wall

Binary build 1006 [291086] provided by ActiveState http://www.ActiveState.com
Built Aug 24 2009 13:48:26
C:Temp> perl -MArchive::Tar -e "print $Archive::Tar::VERSION"
1.52
C:Temp> perl -MArchive::Zip -e "print $Archive::Zip::VERSION"
1.30
C:Temp> tar --version
tar (GNU tar) 1.21
C:Temp> unzip -v
UnZip 5.52 of 28 February 2005, by Cygwin. Original by Info-ZIP.




相关问题
热门标签