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 161 def initialize(mappedZip) @mappedZip = mappedZip end
Public Instance Methods
atime(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 319 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 else nil end end
basename(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 297 def basename(fileName) ::File.basename(fileName) end
blockdev?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 345 def blockdev?(filename) false end
chardev?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 349 def chardev?(filename) false end
chmod(modeInt, *filenames)
click to toggle source
# 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
chown(ownerInt, groupInt, *filenames)
click to toggle source
# 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
ctime(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 330 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 else nil end end
delete(*args)
click to toggle source
# File lib/zip/filesystem.rb, line 406 def delete(*args) args.each { |fileName| if directory?(fileName) raise Errno::EISDIR, "Is a directory - \"#{fileName}\"" end @mappedZip.remove(fileName) } end
Also aliased as: unlink
directory?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 227 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 293 def dirname(fileName) ::File.dirname(fileName) end
executable?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 202 def executable?(fileName) unix_mode_cmp(fileName, 0111) end
Also aliased as: executable_real?
exists?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 183 def exists?(fileName) expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil end
expand_path(aPath)
click to toggle source
# File lib/zip/filesystem.rb, line 422 def expand_path(aPath) @mappedZip.expand_path(aPath) end
file?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 288 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 361 def ftype(fileName) @mappedZip.get_entry(fileName).directory? ? "directory" : "file" end
join(*fragments)
click to toggle source
# File lib/zip/filesystem.rb, line 305 def join(*fragments) ::File.join(*fragments) end
link(fileName, symlinkName)
click to toggle source
# File lib/zip/filesystem.rb, line 373 def link(fileName, symlinkName) raise NotImplementedError, "The link() function is not implemented" end
mtime(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 315 def mtime(fileName) @mappedZip.get_entry(fileName).mtime end
new(fileName, openMode = "r")
click to toggle source
# File lib/zip/filesystem.rb, line 244 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 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
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 377 def pipe raise NotImplementedError, "The pipe() function is not implemented" end
pipe?(filename)
click to toggle source
# File lib/zip/filesystem.rb, line 341 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 192 def readable?(fileName) unix_mode_cmp(fileName, 0444) end
Also aliased as: readable_real?
readlines(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 390 def readlines(fileName) open(fileName) { |is| is.readlines } end
readlink(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 365 def readlink(fileName) raise NotImplementedError, "The readlink() function is not implemented" end
rename(fileToRename, newName)
click to toggle source
# File lib/zip/filesystem.rb, line 416 def rename(fileToRename, newName) @mappedZip.rename(fileToRename, newName) { true } end
setgid?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 211 def setgid?(fileName) unix_mode_cmp(fileName, 02000) end
setuid?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 207 def setuid?(fileName) unix_mode_cmp(fileName, 04000) end
size(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 248 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 253 def size?(fileName) entry = @mappedZip.find_entry(fileName) return (entry == nil || entry.directory?) ? nil : entry.size end
socket?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 357 def socket?(fileName) false end
split(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 301 def split(fileName) ::File.split(fileName) end
stat(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 381 def stat(fileName) if ! exists?(fileName) raise Errno::ENOENT, fileName end ZipFsStat.new(self, fileName) end
Also aliased as: lstat
sticky?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 215 def sticky?(fileName) unix_mode_cmp(fileName, 01000) end
symlink(fileName, symlinkName)
click to toggle source
# File lib/zip/filesystem.rb, line 369 def symlink(fileName, symlinkName) raise NotImplementedError, "The symlink() function is not implemented" end
symlink?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 353 def symlink?(fileName) false end
truncate(fileName, len)
click to toggle source
# File lib/zip/filesystem.rb, line 223 def truncate(fileName, len) raise StandardError, "truncate not supported" end
umask(*args)
click to toggle source
# File lib/zip/filesystem.rb, line 219 def umask(*args) ::File.umask(*args) end
utime(modifiedTime, *fileNames)
click to toggle source
# File lib/zip/filesystem.rb, line 309 def utime(modifiedTime, *fileNames) fileNames.each { |fileName| get_entry(fileName).time = modifiedTime } end
writable?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 197 def writable?(fileName) unix_mode_cmp(fileName, 0222) end
Also aliased as: writable_real?
zero?(fileName)
click to toggle source
# File lib/zip/filesystem.rb, line 281 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 165 def get_entry(fileName) if ! 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 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