Method: SevenZipRuby::SevenZipReader#extract_data
- Defined in:
- lib/seven_zip_ruby/seven_zip_reader.rb
#extract_data(index) ⇒ Object
Extract some entries of 7zip archive and return the extracted data.
Args
index
-
Index of the entry to extract. :all, Integer or Array of Integer can be specified.
Examples
File.open("filename.7z", "rb") do |file|
SevenZipRuby::SevenZipReader.open(file) do |szr|
small_entries = szr.entries.select{ |i| i.size < 1024 }
data_list = szr.extract_data(small_entries)
# => [ "file contents1", "file contents2", ... ]
end
end
File.open("filename.7z", "rb") do |file|
SevenZipRuby::SevenZipReader.open(file) do |szr|
largest_entry = szr.entries.max_by{ |i| i.file? ? i.size : 0 }
data_list = szr.extract_data(largest_entry)
# => "file contents..."
end
end
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 |
# File 'lib/seven_zip_ruby/seven_zip_reader.rb', line 416 def extract_data(index) case(index) when :all idx_prj = Object.new def idx_prj.[](index) return index end ret = [] synchronize do extract_all_impl(data_proc(ret, idx_prj)) end return ret when Enumerable index_list = index.map(&:to_i) idx_prj = Hash[*(index_list.each_with_index.map{ |idx, i| [ idx, i ] }.flatten)] ret = [] synchronize do extract_files_impl(index_list, data_proc(ret, idx_prj)) end return ret when nil raise ArgumentError.new("Invalid parameter index") else index = index.to_i item = entry(index) return nil unless (item.has_data?) idx_prj = Object.new def idx_prj.[](index) return 0 end ret = [] synchronize do extract_impl(index, data_proc(ret, idx_prj)) end return ret[0] end end |