2015-12-10 64 views
0

我有以下perl腳本,旨在接受命令行參數,將所有用戶數據文件壓縮到zip文件中,然後刪除原始數據。腳本沒有問題,但是當以不同的用戶作爲參數再次運行時,它會覆蓋userData.zip文件中的以前的數據。我搜索了並且無法找到如何執行此任務。它應該繼續接受用戶作爲參數並將其文件夾追加到userData.zip文件中。在perl中將文件添加到壓縮文件夾中

任何幫助表示讚賞。

use 5.14.2; 
use strict; 
use warnings; 
use Archive::Zip qw(:ERROR_CODES :CONSTANTS); 
use File::Path; 
my ($DATAFILEIN, $DATAFILEOUT); 
my ($new,$zip); 
use constant COLUMNS => 6; 

sub main { 
    verifyArguments(); 
    setDataFileIn(); 
    zipFiles(); 
    deleteUserFiles(); 
    #setDataFileOut(); 
    #printData(); 
    #writeData(); 
} 


sub verifyArguments { 
if (!(@ARGV) || !(-e $ARGV[0])) { 
    die "\n\nYou must specify correct file name upon command invocation.\n\n"; 
} 
} 

sub setDataFileIn { 
    $DATAFILEIN = $ARGV[0]; 
} 

sub zipFiles { 
    print "\nBacking up ".$DATAFILEIN."\n"; 
    sleep 1; 

    $zip = Archive::Zip->new(); 
    opendir (DIR, $DATAFILEIN) or die $!; 

    while (my $file = readdir(DIR)) { 

    # Use -f to look for a file 
    next unless (-f $DATAFILEIN."\\".$file); 

$zip->addFile($DATAFILEIN."\\".$file,); 
print "Added $file to zip\n"; 
    } 
closedir(DIR); 
my $fileName = $DATAFILEIN; 
unless ($zip->writeToFileNamed('userData.zip') == AZ_OK) { 
    die 'write error'; 
    } 
print "Successfully backed up $fileName to userData.zip\n"; 
} 

sub deleteUserFiles{ 
    rmtree($DATAFILEIN); 

} 


main(); 

回答

1

您是否閱讀過Archive :: Zip FAQ的這部分內容?

無法讀取/修改/寫入相同的Zip文件

問:爲什麼我不能打開Zip文件,添加成員,並寫回信嗎?當我嘗試時,我收到 錯誤消息。

答:因爲Archive :: Zip沒有(也不能一般地)將文件 內容讀入內存,所以原始Zip文件需要在 左右,直到完成新文件的寫入。

執行此操作的最佳方法是將Zip文件寫入臨時文件,然後 將臨時文件重命名爲具有舊名稱(可能在 之後刪除舊文件)。

Archive :: Zip v1.02添加了覆蓋方法overwrite()和 overwriteAs()來做到這一點小心翼翼。

有關此技術的示例,請參閱示例/ updateZip.pl。

我在代碼中看不到$zip->overwrite()

查找CPAN模塊信息的最佳位置是http://search.cpan.org。在這種情況下,Archive::Zip頁面。該頁面具有Archive :: Zip :: FAQ的文檔鏈接。您可以在那裏閱讀它,或者您可以在安裝了模塊的系統上鍵入perldoc Archive::Zip::FAQ

這些示例是下載的軟件包的一部分。如果您使用cpan命令來安裝Archive :: Zip,則示例將位於構建位置。默認情況下,這將是~/.cpan/build/Archive-Zip-*/examples

+0

你好,謝謝你的回覆。這份文件在哪裏列出?我在這裏搜索了perldoc.perl.org和perlmonks。我只是一個初學者,所以我需要查看示例以瞭解語法。 – Number41

+1

@ Number41真的嗎?在幾乎任何搜索引擎上搜索「perl archive :: zip」都會產生一個[CPAN頁面](https://metacpan.org/pod/Archive::Zip)作爲第一個結果。 –

+0

馬特,你是對的,搜索確實會把它作爲第一個結果。對不起,我的無知.........只是尋求一些幫助。我想我會在這裏找到一個更清晰和簡潔的答案,猜測我錯了。 – Number41

相關問題