2014-11-04 73 views
0

所以基本上我创建了一堆zip文件包含在它里面一个PWE和PWS内的文件。轨rubyzip使多个zip文件副本创建新的zip文件

下面的代码生成了一堆被命名为orgname_org_member_orguser1.zip 其中包含2个文件(PWS和PWE)zip文件

@successful_orgs.each do |org| 
    file = "#{RAILS_ROOT}/my-data/#{org[:location]}_#{org[:member]}_#{org[:username]}.zip" 
    generate_file(ups_file, org) 
end 

    def generate_file(file, org) 
    zipfile = Zip::ZipFile.open(file, Zip::ZipFile::CREATE) 
    pwe_text, pws_text = MyGenerator.password 
    pwe_file = "#{RAILS_ROOT}/tmp/#{org[:location]}_#{org[:member]}.pwe" 
    pws_file = "#{RAILS_ROOT}/tmp/#{org[:location]}_#{org[:member]}.pws" 

    File.open(pwe_file, 'w') { |file| file.write(pwe_text) } 
    File.open(pws_file, 'w') { |file| file.write(pws_text) } 

    zipfile.add("#{org[:location]}_#{org[:member]}.pwe", pwe_file) 
    zipfile.add("#{org[:location]}_#{org[:member]}.pws", pws_file) 
    zipfile.close 

    File.delete(pwe_file) 
    File.delete(pws_file)  
    end 

我想让代码做的是做(创建的zip文件,并将其存储在指定的路径)

但除了上述,我也想创建一个名为all.zip这将包含所有在上面创建的zip文件的另一个zip文件。

含义,all.zip => file1.zip,file2.zip等

我不知道如何incoporate这种逻辑在我上面的代码。任何帮助,将不胜感激。

编辑:我不希望搜索和添加目录中的所有文件。我只想添加上面代码中创建的zip文件。

回答

1

您可以收集所有阵列中的zip文件的路径,然后将它们添加到迭代一个新的zip文件:

zip_files = [] 
@successful_orgs.each do |org| 
    file = "#{RAILS_ROOT}/my-data/#{org[:location]}_#{org[:member]}_#{org[:username]}.zip" 
    zip_files << file 
    generate_file(file, org) 
end 

all_zipped = Zip::ZipFile.open("#{RAILS_ROOT}/tmp/all.zip", Zip::ZipFile::CREATE) 
zip_files.each do |f| 
    all_zipped.add(zip_file) 
end 

请注意,你不会通过这样做是为了获得任何额外的压缩。

+0

感谢@faraz,但我不希望搜索并添加目录中的所有文件。我只想要在上面的代码中创建的zip文件。 – Micheal 2014-11-04 17:09:13