Как я могу скопировать каталог внутри zip-архива во второй zip-архив с помощью Rubyzip?

StackOverflow https://stackoverflow.com/questions/1377189

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть архив .zip, содержащий несколько каталогов.Используя драгоценный камень Rubyzip, я хотел бы получить доступ к архиву .zip, скопировать указанный каталог (и его содержимое) и переместить каталог во второй архив .zip.

В идеале мне не пришлось бы извлекать содержимое первого .zip-архива, а затем повторно заархивировать его во второй архив.Я надеюсь, что есть способ использовать методы, представленные в геме Rubyzip.

Это было полезно?

Решение

Посоветовавшись с одним из сопровождающих драгоценного камня Rubyzip, я узнал, что это невозможно.

Другие советы

Библиотека RubyZip должна была быть обновлена ​​с тех пор, чтобы поддерживать ее.Это сработало для меня.

require 'rubygems'
require 'zip' # gem 'rubyzip', '>= 1.0'

Zip::File.open('large.zip', false) do |input|
  Zip::File.open('small.zip', true) do |output|
    input.glob('my_folder_name/*') do |entry|
      entry.get_input_stream do |input_entry_stream|
        output.get_output_stream(entry.name) do |output_entry_stream|
          # you could also chunk this, rather than reading it all at once.
          output_entry_stream.write(input_entry_stream.read)
        end
      end
    end
  end
end

Для версий RubyZip < 1.0, require 'zip/zip' вместо этого и используйте Zip::ZipFile вместо Zip::File

Это своего рода метод грубой силы (и он может работать, а может и не работать для вашего приложения), но вы можете скопировать весь первый zip-файл, а затем использовать методы Rubyzip, чтобы удалить из скопированного файла все, кроме целевого каталога.

Теоретически то, что вы спрашиваете, должно быть возможно, если вы используете сжатие deflate (при котором каждый файл сохраняется как индивидуально сжатый элемент).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top