2012-06-06 204 views
0

我寫了一個函數來列出特定文件夾中的PDF並將其壓縮,但由於某些原因壓縮內容已損壞。壓縮文件(使用Zippy)已損壞

該腳本的基本功能如下: a)在$target_dir位置創建一個名爲$batch_id的zip文件。 b)將一個名爲$batch_id(.xml)的XML添加到zip根目錄。 c)將在$target_dir/pdf/文件夾中找到的所有PDF添加到zip中的/pdf/文件夾中。

結果:zip成功創建,可以提取XML,但PDF似乎損壞(文件大小非常小,無法打開)。

def zip_batch 
    puts "Zipping batch..." 
    require 'zippy' 

    Zippy.create("#{$target_dir}"+"\\"+"#{$batch_id}"+".zip") do |zip| 
    zip ["#{$batch_id}"+".xml"] = File.open("#{$target_dir}"+"\\"+"#{$batch_id}"+".xml") 
    Dir.glob("#{$target_dir}"+"/pdf/*.pdf").each do |filename| 
     puts " -> Adding "+ filename.gsub("#{$target_dir}"+"/","") 
     puts filename 
     zip[filename.gsub("#{$target_dir}"+"/","")] = File.open(filename) 
    end 
    end 
end 
+0

我發現這個問題是,文件沒有被以二進制模式讀取。 解決了這個問題: zip [filename.gsub(「#{$ target_dir}」+「/」,「」)] = File.open(filename,'rb') – Tedi

+0

然後請添加它作爲答案,稍後您可以接受或刪除此問題,否則它會保持打開 – peter

+0

@peter它已添加爲答案。我需要將它添加到其他地方嗎? (對不起,我這裏挺新的) – Tedi

回答

1

我發現問題是文件沒有以二進制模式讀取。

這解決了這一問題:

zip[filename.gsub("#{$target_dir}"+"/","")] = File.open(filename,'rb') 
相關問題