rubyzip/zipfilesystem.rb

116 lines
2.3 KiB
Ruby
Raw Normal View History

2002-07-26 22:12:34 +08:00
#!/usr/bin/env ruby
2002-07-27 04:58:51 +08:00
require 'filearchive'
module Zip
class ZipFileSystem
2002-07-26 22:12:34 +08:00
def initialize(zipFile)
@zipFile = zipFile
end
def dir
@zipFsDir ||= Dir.new(@zipFile)
end
def file
@zipFsDir ||= ZipFsFile.new(@zipFile)
end
class ZipFsFile
def initialize(zipFile)
@zipFile = zipFile
end
def exists?(fileName)
@zipFile.findEntry(fileName) != nil
end
alias :exist? :exists?
def directory?(fileName)
entry = @zipFile.findEntry(fileName)
entry != nil && entry.directory?
end
def open(fileName, openMode = "r", &block)
raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r"
@zipFile.getInputStream(fileName, &block)
end
def size(fileName)
@zipFile.getEntry(fileName).size
end
# nil for not found and nil for directories
def size?(fileName)
entry = @zipFile.findEntry(fileName)
return (entry == nil || entry.directory?) ? nil : entry.size
end
def zero?(fileName)
sz = size(fileName)
sz == nil || sz == 0
rescue Errno::ENOENT
false
end
def file?(fileName)
entry = @zipFile.findEntry(fileName)
entry != nil && entry.file?
end
def dirname(fileName)
::File.dirname(fileName)
end
def basename(fileName)
::File.basename(fileName)
end
def split(fileName)
::File.split(fileName)
end
def join(*fragments)
::File.join(*fragments)
end
def mtime(fileName)
@zipFile.getEntry(fileName).mtime
end
def pipe?(filename)
false
end
def blockdev?(filename)
false
end
def symlink?(fileName)
false
end
def socket?(fileName)
false
end
def ftype(fileName)
@zipFile.getEntry(fileName).directory? ? "directory" : "file"
end
def readlink(fileName)
raise NotImplementedError, "The readlink() function is not implemented to ZipFileSystem"
end
2002-07-27 06:23:32 +08:00
def symlink(fileName, symlinkName)
raise NotImplementedError, "The symlink() function is not implemented to ZipFileSystem"
end
2002-07-27 06:25:36 +08:00
def link(fileName, symlinkName)
raise NotImplementedError, "The link() function is not implemented to ZipFileSystem"
end
2002-07-27 05:32:12 +08:00
end
2002-07-26 22:12:34 +08:00
end
end