2013-04-01 93 views
-4

我需要在這裏的perl.enter代碼中創建一個zip文件 Exisiting文件名是2.csv我想一個腳本,使它2.zip 我試圖在不使用CPAN模塊的情況下在perl中創建ZIP文件

my $file = 'dispatch_report_seg_flo.csv' ; 
# Retrieve the namme of the file to archive. 
print("Name the file to archive: "); 

# Confirm the file exists, if not exit the program. 
(-e $file) or die("Cannot find file `$file_nm`.\n"); 

# Zip the file. 
print("Trying file name '$file.zip'"); 
system("zip 'dispatch.zip' '$file'"); 
my $file1 = 'dispatch.zip'; 
+0

u能告訴我什麼都是您所遇到的模塊? –

+4

爲什麼我發佈的代碼好,但不是我發佈到CPAN的代碼? – ikegami

+1

你忘了問一個問題!你有什麼問題?你得到了什麼錯誤? – ikegami

回答

-1

刪除'字符:

system("zip dispatch.zip $file"); 
+2

這有什麼幫助?在您更改之前,只有名稱中帶有單引號的文件纔會失敗。更改後,它會失敗更多,包括名稱中包含空格的文件。 – ikegami

+0

沒有在第一行看到該文件的名稱?沒有空間空白 –

+3

所以你說的應該超越高於必要的[耦合](http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29),讓你的答案只是無用的? – ikegami

1

這個鏈接可以幫助你... create and read tar.bz2 files in perl 如果您使用婉Perl模塊到壓縮文件,然後使用

use IO::Compress::Zip qw(:all); 

    zip [ glob("*.xls") ] => "test_zip.zip" 
    or die "some problem: $ZipError" ; 

添加這些線路投入使用腳本,如果你想

5

這應該工作,除非文件名中有單引號。這裏有兩種更好的方法:

  1. system($EXECUTABLE, @ARGS),它不會不必要地產生一個殼。

    system("zip", "dispatch.zip", $file); 
    
  2. system($SHELL_COMMAND),這需要一個外殼命令的創建。

    # A poor substitute for String::ShellQuote's shell_quote 
    sub shell_quote { 
        my @s = @_; 
        for (@s) { s/'/'\\''/g; $_ = "'$_'"; } 
        return join(' ', @s); 
    } 
    
    system(shell_quote("zip", "dispatch.zip", $file)); 
    

    很明顯,第一種解決方案比較好,但如果您想進行某種類型的shell重定向,您可能想使用此解決方案。

    system(shell_quote("zip", "dispatch.zip", $file) . ' >/dev/null'); 
    
相關問題