Instances of this class are normally accessed via the accessor ZipFile::file. An instance of ZipFsFile behaves like ruby's builtin File (class) object, except it works on ZipFile entries.
The individual methods are not documented due to their similarity with the methods in File
# File lib/zip/zipfilesystem.rb, line 156 def initialize(mappedZip) @mappedZip = mappedZip end
# File lib/zip/zipfilesystem.rb, line 312 def atime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].atime else nil end end
# File lib/zip/zipfilesystem.rb, line 290 def basename(fileName) ::File.basename(fileName) end
# File lib/zip/zipfilesystem.rb, line 334 def blockdev?(filename) false end
# File lib/zip/zipfilesystem.rb, line 338 def chardev?(filename) false end
# File lib/zip/zipfilesystem.rb, line 265 def chmod (modeInt, *filenames) filenames.each { |fileName| e = get_entry(fileName) e.fstype = 3 # force convertion filesystem type to unix e.externalFileAttributes = modeInt << 16 } filenames.size end
# File lib/zip/zipfilesystem.rb, line 253 def chown(ownerInt, groupInt, *filenames) filenames.each { |fileName| e = get_entry(fileName) unless e.extra.member?("IUnix") e.extra.create("IUnix") end e.extra["IUnix"].uid = ownerInt e.extra["IUnix"].gid = groupInt } filenames.size end
# File lib/zip/zipfilesystem.rb, line 321 def ctime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].ctime else nil end end
# File lib/zip/zipfilesystem.rb, line 395 def delete(*args) args.each { |fileName| if directory?(fileName) raise Errno::EISDIR, "Is a directory - \"#{fileName}\"" end @mappedZip.remove(fileName) } end
# File lib/zip/zipfilesystem.rb, line 222 def directory?(fileName) entry = @mappedZip.find_entry(fileName) expand_path(fileName) == "/" || (entry != nil && entry.directory?) end
# File lib/zip/zipfilesystem.rb, line 286 def dirname(fileName) ::File.dirname(fileName) end
# File lib/zip/zipfilesystem.rb, line 197 def executable?(fileName) unix_mode_cmp(fileName, 0111) end
# File lib/zip/zipfilesystem.rb, line 178 def exists?(fileName) expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil end
# File lib/zip/zipfilesystem.rb, line 411 def expand_path(aPath) @mappedZip.expand_path(aPath) end
# File lib/zip/zipfilesystem.rb, line 281 def file?(fileName) entry = @mappedZip.find_entry(fileName) entry != nil && entry.file? end
# File lib/zip/zipfilesystem.rb, line 391 def foreach(fileName, aSep = $/, &aProc) open(fileName) { |is| is.each_line(aSep, &aProc) } end
# File lib/zip/zipfilesystem.rb, line 350 def ftype(fileName) @mappedZip.get_entry(fileName).directory? ? "directory" : "file" end
# File lib/zip/zipfilesystem.rb, line 298 def join(*fragments) ::File.join(*fragments) end
# File lib/zip/zipfilesystem.rb, line 362 def link(fileName, symlinkName) raise NotImplementedError, "The link() function is not implemented" end
# File lib/zip/zipfilesystem.rb, line 308 def mtime(fileName) @mappedZip.get_entry(fileName).mtime end
# File lib/zip/zipfilesystem.rb, line 239 def new(fileName, openMode = "r") open(fileName, openMode) end
# File lib/zip/zipfilesystem.rb, line 227 def open(fileName, openMode = "r", &block) openMode.gsub!("b", "") # ignore b option case openMode when "r" @mappedZip.get_input_stream(fileName, &block) when "w" @mappedZip.get_output_stream(fileName, &block) else raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r" end end
Permissions not implemented, so if the file exists it is accessible
# File lib/zip/zipfilesystem.rb, line 366 def pipe raise NotImplementedError, "The pipe() function is not implemented" end
# File lib/zip/zipfilesystem.rb, line 330 def pipe?(filename) false end
# File lib/zip/zipfilesystem.rb, line 387 def popen(*args, &aProc) File.popen(*args, &aProc) end
# File lib/zip/zipfilesystem.rb, line 383 def read(fileName) @mappedZip.read(fileName) end
# File lib/zip/zipfilesystem.rb, line 187 def readable?(fileName) unix_mode_cmp(fileName, 0444) end
# File lib/zip/zipfilesystem.rb, line 379 def readlines(fileName) open(fileName) { |is| is.readlines } end
# File lib/zip/zipfilesystem.rb, line 354 def readlink(fileName) raise NotImplementedError, "The readlink() function is not implemented" end
# File lib/zip/zipfilesystem.rb, line 405 def rename(fileToRename, newName) @mappedZip.rename(fileToRename, newName) { true } end
# File lib/zip/zipfilesystem.rb, line 206 def setgid?(fileName) unix_mode_cmp(fileName, 02000) end
# File lib/zip/zipfilesystem.rb, line 202 def setuid?(fileName) unix_mode_cmp(fileName, 04000) end
# File lib/zip/zipfilesystem.rb, line 243 def size(fileName) @mappedZip.get_entry(fileName).size end
Returns nil for not found and nil for directories
# File lib/zip/zipfilesystem.rb, line 248 def size?(fileName) entry = @mappedZip.find_entry(fileName) return (entry == nil || entry.directory?) ? nil : entry.size end
# File lib/zip/zipfilesystem.rb, line 346 def socket?(fileName) false end
# File lib/zip/zipfilesystem.rb, line 294 def split(fileName) ::File.split(fileName) end
# File lib/zip/zipfilesystem.rb, line 370 def stat(fileName) if ! exists?(fileName) raise Errno::ENOENT, fileName end ZipFsStat.new(self, fileName) end
# File lib/zip/zipfilesystem.rb, line 210 def sticky?(fileName) unix_mode_cmp(fileName, 01000) end
# File lib/zip/zipfilesystem.rb, line 358 def symlink(fileName, symlinkName) raise NotImplementedError, "The symlink() function is not implemented" end
# File lib/zip/zipfilesystem.rb, line 342 def symlink?(fileName) false end
# File lib/zip/zipfilesystem.rb, line 218 def truncate(fileName, len) raise StandardError, "truncate not supported" end
# File lib/zip/zipfilesystem.rb, line 214 def umask(*args) ::File.umask(*args) end
# File lib/zip/zipfilesystem.rb, line 302 def utime(modifiedTime, *fileNames) fileNames.each { |fileName| get_entry(fileName).time = modifiedTime } end
# File lib/zip/zipfilesystem.rb, line 192 def writable?(fileName) unix_mode_cmp(fileName, 0222) end
# File lib/zip/zipfilesystem.rb, line 274 def zero?(fileName) sz = size(fileName) sz == nil || sz == 0 rescue Errno::ENOENT false end