Class: ZipTricks::FileReader::ZipEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/zip_tricks/file_reader.rb

Overview

Represents a file within the ZIP archive being read

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#commentString



131
132
133
# File 'lib/zip_tricks/file_reader.rb', line 131

def comment
  @comment
end

#compressed_sizeFixnum



109
110
111
# File 'lib/zip_tricks/file_reader.rb', line 109

def compressed_size
  @compressed_size
end

#crc32Fixnum



106
107
108
# File 'lib/zip_tricks/file_reader.rb', line 106

def crc32
  @crc32
end

#disk_number_startFixnum



118
119
120
# File 'lib/zip_tricks/file_reader.rb', line 118

def disk_number_start
  @disk_number_start
end

#dos_dateFixnum



103
104
105
# File 'lib/zip_tricks/file_reader.rb', line 103

def dos_date
  @dos_date
end

#dos_timeFixnum



100
101
102
# File 'lib/zip_tricks/file_reader.rb', line 100

def dos_time
  @dos_time
end

#external_attrsFixnum



124
125
126
# File 'lib/zip_tricks/file_reader.rb', line 124

def external_attrs
  @external_attrs
end

#filenameString



115
116
117
# File 'lib/zip_tricks/file_reader.rb', line 115

def filename
  @filename
end

#gp_flagsFixnum



94
95
96
# File 'lib/zip_tricks/file_reader.rb', line 94

def gp_flags
  @gp_flags
end

#internal_attrsFixnum



121
122
123
# File 'lib/zip_tricks/file_reader.rb', line 121

def internal_attrs
  @internal_attrs
end

#local_file_header_offsetFixnum



128
129
130
# File 'lib/zip_tricks/file_reader.rb', line 128

def local_file_header_offset
  @local_file_header_offset
end

#made_byFixnum



88
89
90
# File 'lib/zip_tricks/file_reader.rb', line 88

def made_by
  @made_by
end

#storage_modeFixnum



97
98
99
# File 'lib/zip_tricks/file_reader.rb', line 97

def storage_mode
  @storage_mode
end

#uncompressed_sizeFixnum



112
113
114
# File 'lib/zip_tricks/file_reader.rb', line 112

def uncompressed_size
  @uncompressed_size
end

#version_needed_to_extractFixnum



91
92
93
# File 'lib/zip_tricks/file_reader.rb', line 91

def version_needed_to_extract
  @version_needed_to_extract
end

Instance Method Details

#compressed_data_offsetFixnum



154
155
156
# File 'lib/zip_tricks/file_reader.rb', line 154

def compressed_data_offset
  @compressed_data_offset || raise(LocalHeaderPending)
end

#compressed_data_offset=(offset) ⇒ Object

Sets the offset at which the compressed data for this file starts in the ZIP. By default, the value will be set by the Reader for you. If you use delayed reading, you need to set it by using the get_compressed_data_offset on the Reader:

entry.compressed_data_offset = reader.get_compressed_data_offset(io: file,
       local_file_header_offset: entry.local_header_offset)


176
177
178
# File 'lib/zip_tricks/file_reader.rb', line 176

def compressed_data_offset=(offset)
  @compressed_data_offset = offset.to_i
end

#extractor_from(from_io) ⇒ #extract(n_bytes), #eof?

Returns a reader for the actual compressed data of the entry.

reader = entry.extractor_from(source_file) outfile << reader.extract(512 * 1024) until reader.eof?



139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/zip_tricks/file_reader.rb', line 139

def extractor_from(from_io)
  from_io.seek(compressed_data_offset, IO::SEEK_SET)
  case storage_mode
  when 8
    InflatingReader.new(from_io, compressed_size)
  when 0
    StoredReader.new(from_io, compressed_size)
  else
    raise UnsupportedFeature, 'Unsupported storage mode for reading - %<storage_mode>d' %
                              {storage_mode: storage_mode}
  end
end

#known_offset?Boolean

Tells whether the compressed data offset is already known for this entry



160
161
162
# File 'lib/zip_tricks/file_reader.rb', line 160

def known_offset?
  !@compressed_data_offset.nil?
end

#uses_data_descriptor?Boolean

Tells whether the entry uses a data descriptor (this is defined by bit 3 in the GP flags).



166
167
168
# File 'lib/zip_tricks/file_reader.rb', line 166

def uses_data_descriptor?
  (gp_flags & 0x0008) == 0x0008
end