0

所以基本上我正在创建一堆 zip 文件,其中包含一个 pwe 和 pws 文件。

以下代码生成一堆名为 orgname_org_member_orguser1.zip 的 zip 文件,其中包含 2 个文件(一个 pws 和 pwe)

 @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 等

我不确定如何在上面的代码中加入该逻辑。任何帮助,将不胜感激。

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

4

1 回答 1

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

请注意,这样做不会获得任何额外的压缩。

于 2014-11-04T17:00:37.310 回答