Recovering from corrupted archives
Using Salvage Mode
require 'cabriolet'
# Enable salvage mode for corrupted CAB
extractor = Cabriolet::CAB::Extractor.new(
salvage_mode: true,
skip_checksum: true
)
begin
cabinet = extractor.parse('corrupted.cab')
# Extract what we can
cabinet.files.each do |file|
begin
File.write("recovered/#{file.name}", file.data, mode: 'wb')
puts "✓ Recovered: #{file.name}"
rescue => e
puts "✗ Failed: #{file.name} - #{e.message}"
end
end
rescue => e
puts "Partial recovery attempted: #{e.message}"
endPartial Recovery
require 'cabriolet'
# Try to recover files one by one
cabinet = Cabriolet::CAB::Parser.new.parse('damaged.cab')
recovered = 0
failed = 0
cabinet.files.each do |file|
begin
data = file.data # May raise on corruption
File.write("output/#{file.name}", data, mode: 'wb')
recovered += 1
rescue => e
failed += 1
puts "Could not recover #{file.name}: #{e.message}"
end
end
puts "Recovered: #{recovered}, Failed: #{failed}"