ファイルの情報を格納したオブジェクトのクラス。
FileTest に同名のモジュール関数がある場合はそれと同じ働きをします。ただ、ファイル名を引数に取るかわりに Stat 自身について判定する点が違います。
p File::Stat.new($0).directory? #=> false p FileTest.directory?($0) #=> false
以下の属性メソッドは、システムによってサポートされていない場合 0 が返ります。 1.8.0 以降では nil が返ります。
dev デバイス番号(ファイルシステム) dev_major dev の major 番号部 dev_minor dev の minor 番号部 ino i-node 番号 mode ファイルモード nlink ハードリンクの数 uid オーナーのユーザID gid オーナーのグループID rdev デバイスタイプ(スペシャルファイルのみ) rdev_major rdev の major 番号部 rdev_minor rdev の minor 番号部 size ファイルサイズ(バイト単位) blksize 望ましいI/Oのブロックサイズ blocks 割り当てられているブロック数 atime 最終アクセス時刻 mtime 最終更新時刻 ctime 最終状態変更時刻(状態の変更とは chmod などによるもので、Unix では i-node の変更を意味します)
new(path) -> File::Stat
[permalink][rdoc]path に関する File::Stat オブジェクトを生成して返します。 File.stat と同じです。
p $:[0] #=> 例 # "C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8" p File::Stat.new($:[0]) #=> 例 #<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=0, blksize=nil, blocks=nil, atime=Sun Sep 02 14:15:20 +0900 2007, mtime=Tue Apr 24 23:03:44 +0900 2007, ctime=Tue Apr 24 23:03:37 +0900 2007>
self <=> o -> Integer | nil
[permalink][rdoc]ファイルの最終更新時刻を比較します。self が other よりも新しければ正の数を、等しければ 0 を古ければ負の数を返します。比較できない場合は nil を返します。
require 'tempfile' # for Tempfile fp1 = Tempfile.open("first") fp1.print "古い方\n" sleep(1) fp2 = Tempfile.open("second") fp2.print "新しい方\n" p File::Stat.new(fp1.path) <=> File::Stat.new(fp2.path) #=> -1 p File::Stat.new(fp2.path) <=> File::Stat.new(fp1.path) #=> 1 p File::Stat.new(fp1.path) <=> fp2.path #=> nil
atime -> Time
[permalink][rdoc]最終アクセス時刻を返します。
fs = File::Stat.new($0) #例 p fs.atime.to_a #=> [45, 5, 21, 5, 9, 2007, 3, 248, false, "\223\214\213\236 (\225W\217\200\216\236) "]
[SEE_ALSO] Time
birthtime -> Time
[permalink][rdoc]作成された時刻を返します。
File.write("testfile", "foo") sleep 10 File.write("testfile", "bar") sleep 10 File.chmod(0644, "testfile") sleep 10 File.read("testfile") File.stat("testfile").birthtime #=> 2014-02-24 11:19:17 +0900 File.stat("testfile").mtime #=> 2014-02-24 11:19:27 +0900 File.stat("testfile").ctime #=> 2014-02-24 11:19:37 +0900 File.stat("testfile").atime #=> 2014-02-24 11:19:47 +0900
blksize -> Integer
[permalink][rdoc]望ましいI/Oのブロックサイズを返します。
fs = File::Stat.new($0) #例 p fs.blksize #=> nil
blockdev? -> bool
[permalink][rdoc]ブロックスペシャルファイルの時に真を返します。
Dir.glob("/dev/*") {|bd| if File::Stat.new(bd).blockdev? puts bd end } #例 #... #=> /dev/hda1 #=> /dev/hda3 #...
blocks -> Integer
[permalink][rdoc]割り当てられているブロック数を返します。
fs = File::Stat.new($0) #例 p fs.blocks #=> nil
chardev? -> bool
[permalink][rdoc]キャラクタスペシャルファイルの時に真を返します。
Dir.glob("/dev/*") {|bd| if File::Stat.new(bd).chardev? puts bd end } #例 #... #=> /dev/tty1 #=> /dev/stderr #...
ctime -> Time
[permalink][rdoc]最終状態変更時刻を返します。 (状態の変更とは chmod などによるもので、Unix では i-node の変更を意味します)
fs = File::Stat.new($0) #例 p fs.ctime.to_f #=> 1188719843.0
[SEE_ALSO] Time
dev -> String
[permalink][rdoc]デバイス番号(ファイルシステム)を返します。
fs = File::Stat.new($0) p fs.dev #例 #=> 2
dev_major -> Integer
[permalink][rdoc]dev の major 番号部を返します。
fs = File::Stat.new($0) p fs.dev_major #例 #=> nil #この場合ではシステムでサポートされていないため
dev_minor -> Integer
[permalink][rdoc]dev の minor 番号部を返します。
fs = File::Stat.new($0) p fs.dev_minor #例 #=> nil
directory? -> bool
[permalink][rdoc]ディレクトリの時に真を返します。
p File::Stat.new($0).directory? #=> false
[SEE_ALSO] FileTest.#directory?
executable? -> bool
[permalink][rdoc]実効ユーザ/グループIDで実行できる時に真を返します。
p File::Stat.new($0).executable? # 例 #=> true
executable_real? -> bool
[permalink][rdoc]実ユーザ/グループIDで実行できる時に真を返します。
p File::Stat.new($0).executable_real? #例 #=> true
file? -> bool
[permalink][rdoc]通常ファイルの時に真を返します。
p File::Stat.new($0).file? #=> true
ftype -> String
[permalink][rdoc]ファイルのタイプを表す文字列を返します。
文字列は以下のうちのいずれかです。
"file" "directory" "characterSpecial" "blockSpecial" "fifo" "link" "socket" "unknown"
サンプル
fs = File::Stat.new($0) p fs.ftype #=> "file" p File::Stat.new($:[0]).ftype #=> "directory"
gid -> Integer
[permalink][rdoc]オーナーのグループIDを返します。
fs = File::Stat.new($0) #例 p fs.gid #=> 0
grpowned? -> bool
[permalink][rdoc]グループIDが実効グループIDと等しい時に真を返します。
補助グループIDは考慮されません。
printf "%s %s\n", $:[0], File::Stat.new($:[0]).grpowned? #例 #=> /usr/local/lib/site_ruby/1.8 false printf "%s %s\n", $0, File::Stat.new($0).grpowned? #例 #=> filestat.rb true
ino -> Integer
[permalink][rdoc]i-node 番号を返します。
fs = File::Stat.new($0) #例 p fs.ino #=> 0
mode -> Integer
[permalink][rdoc]ファイルモードを返します。
fs = File::Stat.new($0) printf "%o\n", fs.mode #例 #=> 100644
mtime -> Time
[permalink][rdoc]最終更新時刻を返します。
fs = File::Stat.new($0) #例 p fs.mtime #=> Wed Sep 05 20:42:18 +0900 2007
[SEE_ALSO] Time
nlink -> Integer
[permalink][rdoc]ハードリンクの数を返します。
fs = File::Stat.new($0) #例 p fs.nlink #=> 1
owned? -> bool
[permalink][rdoc]自分のものである時に真を返します。
printf "%s %s\n", $:[0], File::Stat.new($:[0]).owned? #例 #=> /usr/local/lib/site_ruby/1.8 false
pipe? -> bool
[permalink][rdoc]無名パイプおよび名前つきパイプ(FIFO)の時に真を返します。
system("mkfifo /tmp/pipetest") p File::Stat.new("/tmp/pipetest").pipe? #=> true
rdev -> Integer
[permalink][rdoc]デバイスタイプ(スペシャルファイルのみ)を返します。
fs = File::Stat.new($0) #例 p fs.rdev #=> 2
rdev_major -> Integer
[permalink][rdoc]rdev の major 番号部を返します。
fs = File::Stat.new($0) #例 p fs.rdev_major #=> nil
rdev_minor -> Integer
[permalink][rdoc]rdev の minor 番号部を返します。
fs = File::Stat.new($0) #例 p fs.rdev_minor #=> nil
readable? -> bool
[permalink][rdoc]読み込み可能な時に真を返します。
p File::Stat.new($0).readable? #=> true
readable_real? -> bool
[permalink][rdoc]実ユーザ/実グループによって読み込み可能な時に真を返します。
p File::Stat.new($0).readable_real? #=> true
setgid? -> bool
[permalink][rdoc]setgidされている時に真を返します。
Dir.glob("/usr/sbin/*") {|bd| if File::Stat.new(bd).setgid? puts bd end } #例 #... #=> /usr/sbin/postqueue #...
setuid? -> bool
[permalink][rdoc]setuidされている時に真を返します。
Dir.glob("/bin/*") {|bd| if File::Stat.new(bd).setuid? puts bd end } #例 #... #=> /bin/ping #=> /bin/su #...
size -> Integer
[permalink][rdoc]ファイルサイズ(バイト単位)を返します。
fs = File::Stat.new($0) #例 p fs.size #=> 1548
size? -> Integer | nil
[permalink][rdoc]サイズが0の時にはnil、それ以外の場合はファイルサイズを返します。
require 'tempfile' fp = Tempfile.new("temp") p fp.size #=> 0 p File::Stat.new(fp.path).size? #=> nil fp.print "not 0 " fp.close p FileTest.exist?(fp.path) #=> true p File::Stat.new(fp.path).size? #=> 6
socket? -> bool
[permalink][rdoc]ソケットの時に真を返します。
Dir.glob("/tmp/*"){|file| if File::Stat.new(file).socket? printf "%s\n", file end } #例 #=> /tmp/uimhelper-hogehoge #...
sticky? -> bool
[permalink][rdoc]stickyビットが立っている時に真を返します。
Dir.glob("/usr/bin/*") {|bd| begin if File::Stat.new(bd).sticky? puts bd end rescue end } #例 #... #=> /usr/bin/emacs-21.4 #...
symlink? -> false
[permalink][rdoc]シンボリックリンクである時に真を返します。ただし、File::Statは自動的にシンボリックリンクをたどっていくので常にfalseを返します。
require 'fileutils' outfile = $0 + ".ln" FileUtils.ln_s($0, outfile) p File::Stat.new(outfile).symlink? #=> false p File.lstat(outfile).symlink? #=> true p FileTest.symlink?(outfile) #=> true
[SEE_ALSO] File.lstat
uid -> Integer
[permalink][rdoc]オーナーのユーザIDを返します。
fs = File::Stat.new($0) #例 p fs.uid #=> 0
world_readable? -> Integer | nil
[permalink][rdoc]If stat is readable by others, returns an integer representing the file permission bits of stat. Returns nil otherwise. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
m = File.stat("/etc/passwd").world_readable? # => 420 sprintf("%o", m) # => "644"
world_writable? -> Integer | nil
[permalink][rdoc]If stat is writable by others, returns an integer representing the file permission bits of stat. Returns nil otherwise. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
m = File.stat("/tmp").world_writable? # => 511 sprintf("%o", m) # => "777"
writable? -> bool
[permalink][rdoc]書き込み可能な時に真を返します。
p File::Stat.new($0).writable? #=> true
writable_real? -> bool
[permalink][rdoc]実ユーザ/実グループによって書き込み可能な時に真を返します。
p File::Stat.new($0).writable_real? #=> true
zero? -> bool
[permalink][rdoc]サイズが0である時に真を返します。
p File::Stat.new($0).zero? #=> false