Class: Omnizip::Formats::Rar5::Writer

Inherits:
Omnizip::Formats::Rar::RarFormatBase show all
Defined in:
lib/omnizip/formats/rar5/writer.rb

Overview

RAR v5 archive writer

Writes RAR 5.x format archives, creating headers and compressing file data according to the RAR v5 specification.

RAR 5 uses variable-length integers and improved header structure.

Examples:

Writing a RAR5 archive

writer = Rar5::Writer.new
File.open("archive.rar", "wb") do |file|
  entries = [
    {name: "file.txt", data: "content", time: Time.now}
  ]
  writer.write_archive(file, entries)
end

Instance Attribute Summary

Attributes inherited from Omnizip::Formats::Rar::RarFormatBase

#spec, #version

Instance Method Summary collapse

Methods inherited from Omnizip::Formats::Rar::RarFormatBase

#block_type_code, #block_type_name, #compress, #compression_method_code, #compression_method_name, #decompress, #dictionary_size_code, #encryption_algorithm, #read_archive, #supports_feature?, #verify_magic_bytes

Constructor Details

#initializeWriter

Initialize a RAR v5 writer



31
32
33
34
# File 'lib/omnizip/formats/rar5/writer.rb', line 31

def initialize
  super("rar5")
  @compressor = Compressor.new
end

Instance Method Details

#write_archive(io, entries) ⇒ void

This method returns an undefined value.

Write a RAR v5 archive

Parameters:

  • io (IO)

    The output stream

  • entries (Array<Hash>)

    The entries to write



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/omnizip/formats/rar5/writer.rb', line 41

def write_archive(io, entries)
  # Write magic bytes
  io.write(spec.magic_bytes.pack("C*"))

  # Write main header
  write_main_header(io)

  # Write file entries
  entries.each do |entry|
    write_file_entry(io, entry)
  end

  # Write end marker
  write_end_marker(io)
end