ファイルの検査関数を集めたモジュールです。
FileTest で定義された各メソッドは、システムコールに失敗しても例外を発生させません。真を返した時のみ、返り値は意味をもちます。例えば、
File.exist?('/root/.bashrc')
が false を返しても、それはファイルが存在しないことを保証しません。
blockdev?(file) -> bool
[permalink][rdoc]ファイルがブロックスペシャルファイルである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
Dir.glob("/dev/*") { |file| puts file if FileTest.blockdev?(file) } # /dev/disk0 # /dev/disk0s3 # ...
chardev?(file) -> bool
[permalink][rdoc]ファイルがキャラクタスペシャルファイルの時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
Dir.glob("/dev/*") { |file| puts file if FileTest.chardev?(file) } # /dev/console # /dev/tty # ...
directory?(file) -> bool
[permalink][rdoc]ファイルがディレクトリの時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
FileTest.directory?('/etc') # => true FileTest.directory?('/etc/passwd') # => false f = File.open('/etc') FileTest.directory?(f) # => true f.close FileTest.directory?(f) # => IOError: closed stream
zero?(file) -> bool
[permalink][rdoc]empty?(file) -> bool
ファイルが存在して、そのサイズが 0 である時に真を返します。そうでない場合、あるいはシステムコールに失敗した場合には false を返します。
IO.write("zero.txt", "")
FileTest.zero?("zero.txt") # => true
IO.write("nonzero.txt", "1")
FileTest.zero?("nonzero.txt") # => false
[SEE_ALSO] FileTest.#size, FileTest.#size?
executable?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスにより実行できる時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
FileTest.executable?('/bin') # => true FileTest.executable?('/bin/bash') # => true
executable_real?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスの実ユーザか実グループで実行できる時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("empty.txt", "")
File.chmod(0744, "empty.txt")
FileTest.executable_real?("empty.txt") # => true
File.chmod(0644, "empty.txt")
FileTest.executable_real?("empty.txt") # => false
exist?(file) -> bool
[permalink][rdoc]ファイルが存在する時に真を返します。そうでない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
FileTest.exist?('/etc/passwd') # => true FileTest.exist?('/etc') # => true FileTest.exist?('/etc/no_such_file') # => false FileTest.exist?('/etc/no_such_directory') # => false
exists?(file) -> bool
[permalink][rdoc]このメソッドは deprecated です。FileTest.#exist? を使用してください。
file?(file) -> bool
[permalink][rdoc]ファイルが通常ファイルである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
FileTest.file?('/bin/bash') # => true FileTest.file?('/bin') # => false FileTest.file?('/no_such_file') # => false
grpowned?(file) -> bool
[permalink][rdoc]ファイルのグループ ID がカレントプロセスの実効グループ ID と等しい時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("testfile", "")
File.chown(-1, Process.gid, "testfile")
FileTest.grpowned?("testfile") # => true
File.chown(-1, Process.gid + 10, "testfile")
FileTest.grpowned?("testfile") # => false
identical?(file1, file2) -> bool
[permalink][rdoc]file1 と file2 が同じファイルを指している時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
ruby 1.8.3 以前ではKernel.#test(?-, file1, file2)を使ってください。
open("a", "w") {} p File.identical?("a", "a") #=> true p File.identical?("a", "./a") #=> true File.link("a", "b") p File.identical?("a", "b") #=> true File.symlink("a", "c") p File.identical?("a", "c") #=> true open("d", "w") {} p File.identical?("a", "d") #=> false
owned?(file) -> bool
[permalink][rdoc]ファイルのユーザがカレントプロセスの実効ユーザと等しい時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("testfile", "")
File.chown(Process.uid, -1, "testfile")
FileTest.owned?("testfile") # => true
File.chown(501, -1, "testfile")
FileTest.owned?("testfile") # => false
pipe?(file) -> bool
[permalink][rdoc]指定したファイルがパイプである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
例:
r, w = IO.pipe FileTest.pipe?(r) # => true FileTest.pipe?(w) # => true
readable?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスにより読み込み可能な時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("testfile", "")
File.chmod(0644, "testfile")
FileTest.readable?("testfile") # => true
File.chmod(0200, "testfile")
FileTest.readable?("testfile") # => false
readable_real?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスの実ユーザか実グループによって読み込み可能な時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
[SEE_ALSO] FileTest.#readable?
setgid?(file) -> bool
[permalink][rdoc]ファイルが setgid(2) されている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("g+s", "testfile")
FileTest.setgid?("testfile") # => true
FileUtils.chmod("g-s", "testfile")
FileTest.setgid?("testfile") # => false
setuid?(file) -> bool
[permalink][rdoc]ファイルが setuid(2) されている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("u+s", "testfile")
FileTest.setuid?("testfile") # => true
FileUtils.chmod("u-s", "testfile")
FileTest.setuid?("testfile") # => false
size(file) -> Integer
[permalink][rdoc]ファイルのサイズを返します。
[SEE_ALSO] FileTest.#size?, FileTest.#zero?
例:
FileTest.size('/etc/passwd') # => 5925
size?(file) -> Integer | nil
[permalink][rdoc]ファイルのサイズを返します。ファイルが存在しない時やファイルのサイズが0の時には nil を返します。
IO.write("testfile", "test")
FileTest.size?("testfile") # => 4
File.delete("testfile")
FileTest.size?("testfile") # => nil
[SEE_ALSO] FileTest.#size, FileTest.#zero?
socket?(file) -> bool
[permalink][rdoc]ファイルがソケットである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
require "socket"
IO.write("testfile", "test")
p FileTest.socket?("testfile") # => false
Socket.unix_server_socket('testsock') { p FileTest.socket?('testsock') } # => true
sticky?(file) -> bool
[permalink][rdoc]ファイルの sticky ビット(chmod(2) 参照)が立っている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("o+t", "testfile")
FileTest.sticky?("testfile") # => true
FileUtils.chmod("o-t", "testfile")
FileTest.sticky?("testfile") # => false
symlink?(file) -> bool
[permalink][rdoc]ファイルがシンボリックリンクである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("testfile", "test")
FileTest.symlink?("testfile") # => false
File.symlink("testfile", "testlink")
FileTest.symlink?("testlink") # => true
world_readable?(path) -> Integer | nil
[permalink][rdoc]path が全てのユーザから読めるならばそのファイルのパーミッションを表す整数を返します。そうでない場合は nil を返します。
整数の意味はプラットフォームに依存します。
m = FileTest.world_readable?("/etc/passwd") "%o" % m # => "644"
world_writable?(path) -> bool
[permalink][rdoc]path が全てのユーザから書き込めるならば、そのファイルのパーミッションを表す整数を返します。そうでない場合は nil を返します。
整数の意味はプラットフォームに依存します。
m = FileTest.world_writable?("/tmp") "%o" % m #=> "777"
writable?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスにより書き込み可能である時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
IO.write("testfile", "test")
File.chmod(0600, "testfile")
FileTest.writable?("testfile") # => true
File.chmod(0400, "testfile")
FileTest.writable?("testfile") # => false
writable_real?(file) -> bool
[permalink][rdoc]ファイルがカレントプロセスの実ユーザか実グループによって書き込み可能である時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。
[SEE_ALSO] FileTest.#writable?