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
# File lib/zip/filesystem.rb, line 161 def initialize(mappedZip) @mappedZip = mappedZip end
# File lib/zip/filesystem.rb, line 319 def atime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].atime else nil end end
# File lib/zip/filesystem.rb, line 297 def basename(fileName) ::File.basename(fileName) end
# File lib/zip/filesystem.rb, line 341 def blockdev?(filename) false end
# File lib/zip/filesystem.rb, line 345 def chardev?(filename) false end
# File lib/zip/filesystem.rb, line 270 def chmod (modeInt, *filenames) filenames.each { |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 } filenames.size end
# File lib/zip/filesystem.rb, line 258 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/filesystem.rb, line 328 def ctime(fileName) e = get_entry(fileName) if e.extra.member? "UniversalTime" e.extra["UniversalTime"].ctime else nil end end
# File lib/zip/filesystem.rb, line 402 def delete(*args) args.each { |fileName| if directory?(fileName) raise Errno::EISDIR, "Is a directory - \"#{fileName}\"" end @mappedZip.remove(fileName) } end
# File lib/zip/filesystem.rb, line 227 def directory?(fileName) entry = @mappedZip.find_entry(fileName) expand_path(fileName) == "/" || (entry != nil && entry.directory?) end
# File lib/zip/filesystem.rb, line 293 def dirname(fileName) ::File.dirname(fileName) end
# File lib/zip/filesystem.rb, line 202 def executable?(fileName) unix_mode_cmp(fileName, 0111) end
# File lib/zip/filesystem.rb, line 183 def exists?(fileName) expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil end
# File lib/zip/filesystem.rb, line 418 def expand_path(aPath) @mappedZip.expand_path(aPath) end
# File lib/zip/filesystem.rb, line 288 def file?(fileName) entry = @mappedZip.find_entry(fileName) entry != nil && entry.file? end
# File lib/zip/filesystem.rb, line 398 def foreach(fileName, aSep = $/, &aProc) open(fileName) { |is| is.each_line(aSep, &aProc) } end
# File lib/zip/filesystem.rb, line 357 def ftype(fileName) @mappedZip.get_entry(fileName).directory? ? "directory" : "file" end
# File lib/zip/filesystem.rb, line 305 def join(*fragments) ::File.join(*fragments) end
# File lib/zip/filesystem.rb, line 369 def link(fileName, symlinkName) raise NotImplementedError, "The link() function is not implemented" end
# File lib/zip/filesystem.rb, line 315 def mtime(fileName) @mappedZip.get_entry(fileName).mtime end
# File lib/zip/filesystem.rb, line 244 def new(fileName, openMode = "r") open(fileName, openMode) end
# File lib/zip/filesystem.rb, line 232 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
Permissions not implemented, so if the file exists it is accessible
# File lib/zip/filesystem.rb, line 373 def pipe raise NotImplementedError, "The pipe() function is not implemented" end
# File lib/zip/filesystem.rb, line 337 def pipe?(filename) false end
# File lib/zip/filesystem.rb, line 394 def popen(*args, &aProc) ::File.popen(*args, &aProc) end
# File lib/zip/filesystem.rb, line 390 def read(fileName) @mappedZip.read(fileName) end
# File lib/zip/filesystem.rb, line 192 def readable?(fileName) unix_mode_cmp(fileName, 0444) end
# File lib/zip/filesystem.rb, line 386 def readlines(fileName) open(fileName) { |is| is.readlines } end
# File lib/zip/filesystem.rb, line 361 def readlink(fileName) raise NotImplementedError, "The readlink() function is not implemented" end
# File lib/zip/filesystem.rb, line 412 def rename(fileToRename, newName) @mappedZip.rename(fileToRename, newName) { true } end
# File lib/zip/filesystem.rb, line 211 def setgid?(fileName) unix_mode_cmp(fileName, 02000) end
# File lib/zip/filesystem.rb, line 207 def setuid?(fileName) unix_mode_cmp(fileName, 04000) end
# File lib/zip/filesystem.rb, line 248 def size(fileName) @mappedZip.get_entry(fileName).size end
Returns nil for not found and nil for directories
# File lib/zip/filesystem.rb, line 253 def size?(fileName) entry = @mappedZip.find_entry(fileName) return (entry == nil || entry.directory?) ? nil : entry.size end
# File lib/zip/filesystem.rb, line 353 def socket?(fileName) false end
# File lib/zip/filesystem.rb, line 301 def split(fileName) ::File.split(fileName) end
# File lib/zip/filesystem.rb, line 377 def stat(fileName) if ! exists?(fileName) raise Errno::ENOENT, fileName end ZipFsStat.new(self, fileName) end
# File lib/zip/filesystem.rb, line 215 def sticky?(fileName) unix_mode_cmp(fileName, 01000) end
# File lib/zip/filesystem.rb, line 365 def symlink(fileName, symlinkName) raise NotImplementedError, "The symlink() function is not implemented" end
# File lib/zip/filesystem.rb, line 349 def symlink?(fileName) false end
# File lib/zip/filesystem.rb, line 223 def truncate(fileName, len) raise StandardError, "truncate not supported" end
# File lib/zip/filesystem.rb, line 219 def umask(*args) ::File.umask(*args) end
# File lib/zip/filesystem.rb, line 309 def utime(modifiedTime, *fileNames) fileNames.each { |fileName| get_entry(fileName).time = modifiedTime } end
# File lib/zip/filesystem.rb, line 197 def writable?(fileName) unix_mode_cmp(fileName, 0222) end
# File lib/zip/filesystem.rb, line 281 def zero?(fileName) sz = size(fileName) sz == nil || sz == 0 rescue Errno::ENOENT false end
# File lib/zip/filesystem.rb, line 165 def get_entry(fileName) if ! exists?(fileName) raise Errno::ENOENT, "No such file or directory - #{fileName}" end @mappedZip.find_entry(fileName) end
# File lib/zip/filesystem.rb, line 173 def unix_mode_cmp(fileName, mode) begin e = get_entry(fileName) e.fstype == 3 && ((e.external_file_attributes >> 16) & mode ) != 0 rescue Errno::ENOENT false end end