class Zip::FileSystem::ZipFsFile

Instances of this class are normally accessed via the accessor Zip::File::file. An instance of ZipFsFile behaves like ruby's builtin File (class) object, except it works on Zip::File entries.

The individual methods are not documented due to their similarity with the methods in File

Attributes

dir[W]

Public Class Methods

new(mappedZip) click to toggle source
# File lib/zip/filesystem.rb, line 171
def initialize(mappedZip)
  @mappedZip = mappedZip
end

Public Instance Methods

atime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 325
def atime(fileName)
  e = get_entry(fileName)
  if e.extra.member? 'UniversalTime'
    e.extra['UniversalTime'].atime
  elsif e.extra.member? 'NTFS'
    e.extra['NTFS'].atime
  end
end
basename(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 303
def basename(fileName)
  ::File.basename(fileName)
end
blockdev?(_filename) click to toggle source
# File lib/zip/filesystem.rb, line 347
def blockdev?(_filename)
  false
end
chardev?(_filename) click to toggle source
# File lib/zip/filesystem.rb, line 351
def chardev?(_filename)
  false
end
chmod(modeInt, *filenames) click to toggle source
# File lib/zip/filesystem.rb, line 276
def chmod(modeInt, *filenames)
  filenames.each do |fileName|
    e = get_entry(fileName)
    e.fstype = 3 # force convertion filesystem type to unix
    e.unix_perms = modeInt
    e.external_file_attributes = modeInt << 16
    e.dirty = true
  end
  filenames.size
end
chown(ownerInt, groupInt, *filenames) click to toggle source
# File lib/zip/filesystem.rb, line 266
def chown(ownerInt, groupInt, *filenames)
  filenames.each do |fileName|
    e = get_entry(fileName)
    e.extra.create('IUnix') unless e.extra.member?('IUnix')
    e.extra['IUnix'].uid = ownerInt
    e.extra['IUnix'].gid = groupInt
  end
  filenames.size
end
ctime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 334
def ctime(fileName)
  e = get_entry(fileName)
  if e.extra.member? 'UniversalTime'
    e.extra['UniversalTime'].ctime
  elsif e.extra.member? 'NTFS'
    e.extra['NTFS'].ctime
  end
end
delete(*args) click to toggle source
# File lib/zip/filesystem.rb, line 406
def delete(*args)
  args.each do |fileName|
    if directory?(fileName)
      raise Errno::EISDIR, "Is a directory - \"#{fileName}\""
    end
    @mappedZip.remove(fileName)
  end
end
Also aliased as: unlink
directory?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 235
def directory?(fileName)
  entry = @mappedZip.find_entry(fileName)
  expand_path(fileName) == '/' || (!entry.nil? && entry.directory?)
end
dirname(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 299
def dirname(fileName)
  ::File.dirname(fileName)
end
executable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 210
def executable?(fileName)
  unix_mode_cmp(fileName, 0111)
end
Also aliased as: executable_real?
executable_real?(fileName)
Alias for: executable?
exist?(fileName)
Alias for: exists?
exists?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 191
def exists?(fileName)
  expand_path(fileName) == '/' || !@mappedZip.find_entry(fileName).nil?
end
Also aliased as: exist?, owned?, grpowned?
expand_path(aPath) click to toggle source
# File lib/zip/filesystem.rb, line 421
def expand_path(aPath)
  @mappedZip.expand_path(aPath)
end
file?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 294
def file?(fileName)
  entry = @mappedZip.find_entry(fileName)
  !entry.nil? && entry.file?
end
foreach(fileName, aSep = $/, &aProc) click to toggle source
# File lib/zip/filesystem.rb, line 402
def foreach(fileName, aSep = $/, &aProc)
  open(fileName) { |is| is.each_line(aSep, &aProc) }
end
ftype(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 363
def ftype(fileName)
  @mappedZip.get_entry(fileName).directory? ? 'directory' : 'file'
end
grpowned?(fileName)
Alias for: exists?
join(*fragments) click to toggle source
# File lib/zip/filesystem.rb, line 311
def join(*fragments)
  ::File.join(*fragments)
end
lstat(fileName)
Alias for: stat
mtime(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 321
def mtime(fileName)
  @mappedZip.get_entry(fileName).mtime
end
new(fileName, openMode = 'r') click to toggle source
# File lib/zip/filesystem.rb, line 252
def new(fileName, openMode = 'r')
  open(fileName, openMode)
end
open(fileName, openMode = 'r', permissionInt = 0644, &block) click to toggle source
# File lib/zip/filesystem.rb, line 240
def open(fileName, openMode = 'r', permissionInt = 0644, &block)
  openMode.gsub!('b', '') # ignore b option
  case openMode
  when 'r'
    @mappedZip.get_input_stream(fileName, &block)
  when 'w'
    @mappedZip.get_output_stream(fileName, permissionInt, &block)
  else
    raise StandardError, "openmode '#{openMode} not supported" unless openMode == 'r'
  end
end
owned?(fileName)

Permissions not implemented, so if the file exists it is accessible

Alias for: exists?
pipe() click to toggle source
# File lib/zip/filesystem.rb, line 379
def pipe
  raise NotImplementedError, 'The pipe() function is not implemented'
end
pipe?(_filename) click to toggle source
# File lib/zip/filesystem.rb, line 343
def pipe?(_filename)
  false
end
popen(*args, &aProc) click to toggle source
# File lib/zip/filesystem.rb, line 398
def popen(*args, &aProc)
  ::File.popen(*args, &aProc)
end
read(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 394
def read(fileName)
  @mappedZip.read(fileName)
end
readable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 200
def readable?(fileName)
  unix_mode_cmp(fileName, 0444)
end
Also aliased as: readable_real?
readable_real?(fileName)
Alias for: readable?
readlines(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 390
def readlines(fileName)
  open(fileName) { |is| is.readlines }
end
rename(fileToRename, newName) click to toggle source
# File lib/zip/filesystem.rb, line 415
def rename(fileToRename, newName)
  @mappedZip.rename(fileToRename, newName) { true }
end
setgid?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 219
def setgid?(fileName)
  unix_mode_cmp(fileName, 02000)
end
setuid?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 215
def setuid?(fileName)
  unix_mode_cmp(fileName, 04000)
end
size(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 256
def size(fileName)
  @mappedZip.get_entry(fileName).size
end
size?(fileName) click to toggle source

Returns nil for not found and nil for directories

# File lib/zip/filesystem.rb, line 261
def size?(fileName)
  entry = @mappedZip.find_entry(fileName)
  (entry.nil? || entry.directory?) ? nil : entry.size
end
socket?(_fileName) click to toggle source
# File lib/zip/filesystem.rb, line 359
def socket?(_fileName)
  false
end
split(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 307
def split(fileName)
  ::File.split(fileName)
end
stat(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 383
def stat(fileName)
  raise Errno::ENOENT, fileName unless exists?(fileName)
  ZipFsStat.new(self, fileName)
end
Also aliased as: lstat
sticky?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 223
def sticky?(fileName)
  unix_mode_cmp(fileName, 01000)
end
truncate(_fileName, _len) click to toggle source
# File lib/zip/filesystem.rb, line 231
def truncate(_fileName, _len)
  raise StandardError, 'truncate not supported'
end
umask(*args) click to toggle source
# File lib/zip/filesystem.rb, line 227
def umask(*args)
  ::File.umask(*args)
end
utime(modifiedTime, *fileNames) click to toggle source
# File lib/zip/filesystem.rb, line 315
def utime(modifiedTime, *fileNames)
  fileNames.each do |fileName|
    get_entry(fileName).time = modifiedTime
  end
end
writable?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 205
def writable?(fileName)
  unix_mode_cmp(fileName, 0222)
end
Also aliased as: writable_real?
writable_real?(fileName)
Alias for: writable?
zero?(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 287
def zero?(fileName)
  sz = size(fileName)
  sz.nil? || sz == 0
rescue Errno::ENOENT
  false
end

Private Instance Methods

get_entry(fileName) click to toggle source
# File lib/zip/filesystem.rb, line 175
def get_entry(fileName)
  unless exists?(fileName)
    raise Errno::ENOENT, "No such file or directory - #{fileName}"
  end
  @mappedZip.find_entry(fileName)
end
unix_mode_cmp(fileName, mode) click to toggle source
# File lib/zip/filesystem.rb, line 183
def unix_mode_cmp(fileName, mode)
  e = get_entry(fileName)
  e.fstype == 3 && ((e.external_file_attributes >> 16) & mode) != 0
rescue Errno::ENOENT
  false
end