Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Fileクラス

class File

クラスの継承リスト: File < IO < Enumerable < File::Constants < Object < Kernel < BasicObject

要約

ファイルアクセスのためのクラスです。

通常 Kernel.#open または File.open を使って生成します。 IO クラスがインクルードしている File::Constants は File クラスに関係する定数を 格納したモジュールです。 また File::Stat は stat 構造体( stat(2) 参照)を表すクラスです。

目次

特異メソッド
absolute_path atime basename blockdev? chardev? chmod chown ctime delete unlink directory? dirname executable? executable_real? exist? exists? expand_path extname file? fnmatch fnmatch? ftype grpowned? identical? join lchmod lchown link lstat mtime new open owned? path pipe? readable? readable_real? readlink realdirpath realpath rename setgid? setuid? size size? socket? split stat sticky? symlink symlink? truncate umask utime world_readable? world_writable? writable? writable_real? zero?
インスタンスメソッド
atime chmod chown ctime flock lstat mtime path to_path size truncate
定数
ALT_SEPARATOR PATH_SEPARATOR SEPARATOR Separator

特異メソッド

absolute_path(file_name, dir_string=nil) -> String[permalink][rdoc]

file_name を絶対パスに変換した文字列を返します。

相対パスの場合はカレントディレクトリを基準とします。 dir_string を渡した場合はそのディレクトリを基準とします。

File.expand_path と異なり、 file_name 先頭が "~" である場合 それは展開されません。普通のディレクトリ名として処理されます。

p Dir.getwd                      #=> "/home/matz/work/bar"
p ENV["HOME"]                    #=> "/home/matz"
p File.absolute_path("..")         #=> "/home/matz/work"
p File.absolute_path("..", "/tmp") #=> "/"
p File.absolute_path("~")          #=> "/home/matz/work/bar/~"
p File.absolute_path("~foo")       #=> "/home/matz/work/bar/~foo"

[SEE_ALSO] File.expand_path

atime(filename) -> Time[permalink][rdoc]

最終アクセス時刻を返します。

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。
basename(filename, suffix = "") -> String[permalink][rdoc]

filename の一番後ろのスラッシュに続く要素を返します。もし、 引数 suffix が与えられて、かつそれが filename の末尾に 一致するなら、それを取り除いたものを返します。

p File.basename("ruby/ruby.c")          #=> "ruby.c"
p File.basename("ruby/ruby.c", ".c")    #=> "ruby"
p File.basename("ruby/ruby.c", ".*")    #=> "ruby"
p File.basename("ruby/ruby.exe", ".*")  #=> "ruby"
p File.basename("ruby/y.tab.c", ".*")   #=> "y.tab"

File.basename の動作は basename(3) に従います。

p File.basename("foo/bar/")      # => "bar"
[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] suffix:
サフィックスを文字列で与えます。'.*' という文字列を与えた場合、'*' はワイルドカードとして働き '.' を含まない任意の文字列にマッチします。

[SEE_ALSO] File.dirname, File.extname

blockdev?(path) -> bool[permalink][rdoc]

FileTest.#blockdev? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
chardev?(path) -> bool[permalink][rdoc]

FileTest.#chardev? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
chmod(mode, *filename) -> Integer[permalink][rdoc]

ファイルのモードを mode に変更します。モードを変更したファイ ルの数を返します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] mode:
chmod(2) と同様に整数で指定します。
[EXCEPTION] Errno::EXXX:
モードの変更に失敗した場合に発生します。
chown(owner, group, *filename) -> Integer[permalink][rdoc]

ファイルのオーナーとグループを変更します。スーパーユーザだけがファ イルのオーナーとグループを変更できます。変更を行ったファイルの数を 返します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] owner:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、オーナーを現在のままにすることができます。
[PARAM] group:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、グループを現在のままにすることができます。
[EXCEPTION] Errno::EXXX:
変更に失敗した場合に発生します。
ctime(filename) -> Time[permalink][rdoc]

状態が最後に変更された時刻を返します。 状態の変更とは chmod などによるものです。

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。
delete(*filename) -> Integer[permalink][rdoc]
unlink(*filename) -> Integer

ファイルを削除します。削除したファイルの数を返します。 削除に失敗した場合は例外 Errno::EXXX が発生します。

このメソッドは通常ファイルの削除用で、ディレクトリの削除には Dir.rmdir を使います。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。
directory?(path) -> bool[permalink][rdoc]

FileTest.#directory? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
dirname(filename) -> String[permalink][rdoc]

filename の一番後ろのスラッシュより前を文 字列として返します。スラッシュを含まないファイル名に対しては "."(カレントディレクトリ)を返します。

p File.dirname("dir/file.ext")    # => "dir"
p File.dirname("file.ext")        # => "."

File.dirname の動作は dirname(3) に従います。

p File.dirname("foo/bar/")      # => "foo"
p File.dirname("foo//bar")      # => "foo"
[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.basename, File.extname

executable?(path) -> bool[permalink][rdoc]

FileTest.#executable? と同じです。

[PARAM] path:
パスを表す文字列を指定します。
executable_real?(path) -> bool[permalink][rdoc]

FileTest.#executable_real? と同じです。

[PARAM] path:
パスを表す文字列を指定します。
exist?(path) -> bool[permalink][rdoc]
exists?(path) -> bool

FileTest.#exist? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
expand_path(path, default_dir = '.') -> String[permalink][rdoc]

path を絶対パスに展開した文字列を返します。 path が相対パスであれば default_dir を基準にします。

先頭の ~ はホームディレクトリ(環境変数 HOME が使われます)に、 ~USER はそのユーザのホームディレクトリに展開されます。

p Dir.getwd                      #=> "/home/matz/work/foo"
p ENV["HOME"]                    #=> "/home/matz"
p File.expand_path("..")         #=> "/home/matz/work"
p File.expand_path("..", "/tmp") #=> "/"
p File.expand_path("~")          #=> "/home/matz"
p File.expand_path("~foo")       #=> "/home/foo"
[PARAM] path:
パスを表す文字列を指定します。
[PARAM] default_dir:
path が相対パスであれば default_dir を基準に展開されます。
extname(filename) -> String[permalink][rdoc]

ファイル名 filename の拡張子部分(最後の "." に続く文字列)を 返します。ディレクトリ名に含まれる "." や、ファイル名先頭の "." は拡張子の一部としては見なされません。filename に拡張子が含 まれない場合は空文字列を返します。

p File.extname("foo/foo.txt")     # => ".txt"
p File.extname("foo/foo.tar.gz")  # => ".gz"
p File.extname("foo/bar")         # => ""
p File.extname("foo/.bar")        # => ""
p File.extname("foo.txt/bar")     # => ""
p File.extname(".foo")            # => ""
[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.basename, File.dirname

file?(path) -> bool[permalink][rdoc]

FileTest.#file? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
fnmatch(pattern, path, flags = 0) -> bool[permalink][rdoc]
fnmatch?(pattern, path, flags = 0) -> bool

ファイル名のパターンマッチ fnmatch(3) を行います。 path が pattern にマッチすれば真を返します。そうでない場合には false を返します。

[PARAM] pattern:
パターンを文字列で指定します。ワイルドカードとして `*', `?', `[]' が使用できます。 Dir.glob とは違って`{}' や `**/' は使用できません。
    %w(foo foobar bar).each {|f|
      p File.fnmatch("foo*", f)
    }
    # => true
         true
         false
[PARAM] path:
パスを表す文字列を指定します。
[PARAM] flags:
パターンマッチの動作を以下で述べる定数の論理和で指定します。 flags のデフォルト値は0(フラグ指定なし)です。

引数 flags に指定できる定数は以下のとおりです。 これらの定数は File::Constants で定義されていますが、 File クラスの親クラスの IO が File::Constants をインクルードしているので、 これらの定数は File::FNM_NOESCAPE などとして参照可能です。

FNM_NOESCAPE

エスケープ文字 `\' を普通の文字とみなします。

デフォルトでは \ を伴う任意の文字はその文字にマッチしますが、 このフラグをつけると、\ が普通の文字として扱われます。

  p File.fnmatch('\a', 'a')                       # => true
  p File.fnmatch('\a', '\a', File::FNM_NOESCAPE)  # => true

前者で * は、エスケープされているので "*" そのものにマッチ します。

  p File.fnmatch('\*', 'a')                       # => false
  p File.fnmatch('\*', '\a', File::FNM_NOESCAPE)  # => true

単体の \ は、このフラグの有無に関わらず \ にマッチします。 (シングルクォート文字列中では \\ は、\ であることに注意)

  p File.fnmatch('\\', '\\')                      # => true
  p File.fnmatch('\\', '\\', File::FNM_NOESCAPE)  # => true
FNM_PATHNAME

ワイルドカード `*', `?', `[]' が `/' にマッチしなくなります。 シェルのパターンマッチにはこのフラグが使用されています。

  p File.fnmatch('*', '/', File::FNM_PATHNAME)   # => false
  p File.fnmatch('?', '/', File::FNM_PATHNAME)   # => false
  p File.fnmatch('[/]', '/', File::FNM_PATHNAME) # => false
FNM_CASEFOLD

アルファベットの大小文字を区別せずにパターンマッチを行います。

  p File.fnmatch('A', 'a', File::FNM_CASEFOLD)   # => true
FNM_DOTMATCH

ワイルドカード `*', `?', `[]' が先頭の `.' にマッチするようになります。

  p File.fnmatch('*', '.', File::FNM_DOTMATCH)           # => true
  p File.fnmatch('?', '.', File::FNM_DOTMATCH)           # => true
  p File.fnmatch('[.]', '.', File::FNM_DOTMATCH)         # => true
  p File.fnmatch('foo/*', 'foo/.', File::FNM_DOTMATCH)   # => true
ftype(filename) -> String[permalink][rdoc]

ファイルのタイプを表す文字列を返します。

文字列は以下のうちのいずれかです。File.lstat(filename).ftype と同じです。 シンボリックリンクに対して "link" を返します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
情報の取得に失敗した場合に発生します。
grpowned?(path) -> bool[permalink][rdoc]

FileTest.#grpowned? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
identical?(filename1, filename2) -> bool[permalink][rdoc]

FileTest.#identical? と同じです。

[PARAM] filename1:
パスを表す文字列か IO オブジェクトを指定します。
[PARAM] filename2:
パスを表す文字列か IO オブジェクトを指定します。
join(*item) -> String[permalink][rdoc]

File::SEPARATORを間に入れて文字列を連結します。

[item, item, ...].join(File::SEPARATOR)

と同じです。DOSISH 対応で環境依存になる予定です。

[PARAM] item:
連結したいディレクトリ名やファイル名を文字列で与えます。
lchmod(mode, *filename) -> Integer[permalink][rdoc]

File.chmod と同様ですが、シンボリックリンクに関してリンクそのものの モードを変更します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] mode:
chmod(2) と同様に整数で指定します。
[EXCEPTION] NotImplementedError:
lchmod(2) を実装していないシステムでこのメソッドを呼び出すと発生します。
[EXCEPTION] Errno::EXXX:
モードの変更に失敗した場合に発生します。
lchown(owner, group, *filename) -> Integer[permalink][rdoc]

File#chown と同様ですが、 シンボリックリンクに関してリンクそのもののオーナー、 グループを変更します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] owner:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、オーナーを現在のままにすることができます。
[PARAM] group:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、グループを現在のままにすることができます。
[EXCEPTION] NotImplementedError:
lchown(2) を実装していないシステムでこのメソッドを呼び出すと発生します。

old を指す new という名前のハードリンクを 生成します。old はすでに存在している必要があります。 ハードリンクに成功した場合は 0 を返します。

失敗した場合は例外 Errno::EXXX が発生します。

[PARAM] old:
ファイル名を表す文字列を指定します。
[PARAM] new:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。
lstat(filename) -> File::Stat[permalink][rdoc]

File.statと同様ですが、シンボリックリンクに関してリンクそのものの 情報を File::Stat として返します。lstat(2) を実装していないシステムでは、File.stat と同じです。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
情報の取得に失敗した場合に発生します。

[SEE_ALSO] IO#stat, File#lstat

mtime(filename) -> Time[permalink][rdoc]

最終更新時刻を返します。

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。
new(path, mode = "r", perm = 0666) -> File[permalink][rdoc]
open(path, mode = "r", perm = 0666) -> File
open(path, mode = "r", perm = 0666) {|file| ... } -> object

path で指定されるファイルをオープンし、File オブジェクトを生成して 返します。

path が整数の場合はファイルディスクリプタとして扱い、それに対応する File オブジェクトを生成して返します。IO.open と同じです。 ブロックを指定して呼び出した場合は、File オブジェクトを引数として ブロックを実行します。ブロックの実行が終了すると、ファイルは自動的に クローズされます。ブロックの実行結果を返します。

[PARAM] path:
ファイルを文字列で指定します。整数を指定した場合はファイルディスクリプタとして扱います。
[PARAM] mode:
モードを文字列か定数の論理和で指定します。Kernel.#open と同じです。
[PARAM] perm:
ファイルを生成する場合のファイルのパーミッションを整数で指定します。Kernel.#open と同じです。
[EXCEPTION] Errno::EXXX:
ファイルのオープンに失敗した場合に発生します。
owned?(path) -> bool[permalink][rdoc]

FileTest.#owned? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
path(filename) -> String[permalink][rdoc]

指定されたファイル名を文字列で返します。filename が文字列でない場合は、to_path メソッドを呼びます。

[PARAM] filename:
ファイル名を表す文字列か to_path メソッドが定義されたオブジェクトを指定します。
pipe?(path) -> bool[permalink][rdoc]

FileTest.#pipe? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
readable?(path) -> bool[permalink][rdoc]

FileTest.#readable? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
readable_real?(path) -> bool[permalink][rdoc]

FileTest.#readable_real? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。

シンボリックリンクのリンク先のパスを文字列で返します。

[PARAM] path:
シンボリックリンクを表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
指定された path がシンボリックリンクでない場合や、リンクの読み取りに失敗した場合に発生します。
realdirpath(pathname, basedir = nil) -> String[permalink][rdoc]

与えられた pathname に対応する絶対パスを返します。

pathname の最後のコンポーネントは存在していなくても例外は発生しません。

[PARAM] pathname:
ファイル名を指定します。
[PARAM] basedir:
ベースディレクトリを指定します。省略するとカレントディレクトリを使用します。
[EXCEPTION] Errno::ENOENT:
ファイルが存在しない場合に発生します。
realpath(pathname, basedir = nil) -> String[permalink][rdoc]

与えられた pathname に対応する絶対パスを返します。

pathname の全てのコンポーネントは存在しなければなりません。

[PARAM] pathname:
ファイル名を指定します。
[PARAM] basedir:
ベースディレクトリを指定します。省略するとカレントディレクトリを使用します。
[EXCEPTION] Errno::ENOENT:
ファイルが存在しない場合に発生します。
rename(from, to) -> 0[permalink][rdoc]

ファイルの名前を変更します。ディレクトリが異なる場合には移動も行い ます。rename(2) を参照してください。移動先のファ イルが存在する時には上書きされます。

ファイルの移動に成功した場合 0 を返します。失敗した場合は例外 Errno::EXXX が発生します。

[PARAM] from:
ファイルの名前を文字列で与えます。
[PARAM] to:
新しいファイル名を文字列で与えます。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。
setgid?(path) -> bool[permalink][rdoc]

FileTest.#setgid? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
setuid?(path) -> bool[permalink][rdoc]

FileTest.#setuid? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
size(path) -> Integer[permalink][rdoc]

FileTest.#size と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
size?(path) -> bool[permalink][rdoc]

FileTest.#size? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
socket?(path) -> bool[permalink][rdoc]

FileTest.#socket? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
split(pathname) -> [String][permalink][rdoc]

pathname を dirname とbasename に分割して、2 要 素の配列を返します。

[File.dirname(pathname), File.basename(pathname)]

と同じです。

[PARAM] pathname:
パス名を表す文字列を指定します。
stat(filename) -> File::Stat[permalink][rdoc]

filename の情報を含む File::Stat オブジェクトを生成し て返します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
情報の取得に失敗した場合に発生します。

[SEE_ALSO] IO#stat, File#lstat

sticky?(path) -> bool[permalink][rdoc]

FileTest.#sticky? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。

old への new という名前のシンボリックリンクを生成します。

シンボリックリンクの作成に成功すれば 0 を返します。失敗した場合は 例外 Errno::EXXX が発生します。

[PARAM] old:
ファイル名を表す文字列を指定します。
[PARAM] new:
シンボリックリンクを表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。

FileTest.#symlink? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。
truncate(path, length) -> 0[permalink][rdoc]

path で指定されたファイルのサイズを最大 length バイト にします。

サイズの変更に成功すれば 0 を返します。失敗した場合は例外 Errno::EXXX が発生します。

[PARAM] path:
パスを表す文字列を指定します。
[PARAM] length:
変更したいサイズを整数で与えます。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。
umask -> Integer[permalink][rdoc]

現在の umask の値を返します。

[SEE_ALSO] umask(2)

umask(umask) -> Integer[permalink][rdoc]

umask を変更します。変更前の umask の値を返します。

[PARAM] umask:
設定したい umask の値を整数で指定します。

[SEE_ALSO] umask(2)

utime(atime, mtime, *filename) -> Integer[permalink][rdoc]

ファイルの最終アクセス時刻と更新時刻を変更します。変更したファイル の数を返します。変更に失敗した場合は例外 Errno::EXXX が発生 します。

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] atime:
最終アクセス時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] utime:
更新時刻を Time か、起算時からの経過秒数を数値で指定します。
[EXCEPTION] Errno::EXXX:
変更に失敗した場合に発生します。
world_readable?(path) -> Integer | nil[permalink][rdoc]

path が全てのユーザから読めるならばそのファイルのパーミッションを表す 整数を返します。そうでない場合は nil を返します。

整数の意味はプラットフォームに依存します。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。

例:

m = File.world_readable?("/etc/passwd")
"%o" % m                               # => "644"
world_writable?(path) -> bool[permalink][rdoc]

path が全てのユーザから書き込めるならば、そのファイルのパーミッションを表す 整数を返します。そうでない場合は nil を返します。

整数の意味はプラットフォームに依存します。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。

例:

m = File.world_writable?("/tmp")
"%o" % m                               #=> "777"
writable?(path) -> bool[permalink][rdoc]

FileTest.#writable? と同じです。

[PARAM] path:
パスを表す文字列を指定します。
writable_real?(path) -> bool[permalink][rdoc]

FileTest.#writable_real? と同じです。

[PARAM] path:
パスを表す文字列を指定します。
zero?(path) -> bool[permalink][rdoc]

FileTest.#zero? と同じです。

[PARAM] path:
パスを表す文字列か IO オブジェクトを指定します。

インスタンスメソッド

atime -> Time[permalink][rdoc]

最終アクセス時刻を Time オブジェクトとして返します。

[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。

[SEE_ALSO] File#lstat, File#ctime, File#mtime

chmod(mode) -> 0[permalink][rdoc]

ファイルのモードを指定された mode に変更します。

モードの変更に成功した場合は 0 を返します。失敗した場合は例外 Errno::EXXX が発生し ます。

[PARAM] mode:
chmod(2) と同様に整数で指定します。
[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。

例:

f = File.new("out", "w");
f.chmod(0644)   #=> 0
chown(owner, group) -> 0[permalink][rdoc]

ファイルのオーナーとグループを変更します。

適切な権限があればファイルのオーナーとグループを変更できます。 所有者の変更に成功した場合は 0 を返します。変更に失敗した場合は 例外 Errno::EXXX が発生します。

[PARAM] owner:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、オーナーを現在のままにすることができます。
[PARAM] group:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、グループを現在のままにすることができます。
[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
変更に失敗した場合に発生します。
ctime -> Time[permalink][rdoc]

状態が最後に変更された時刻を Time オブジェクトとして返します。状態の変更とは chmod などによるものです。

[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。

[SEE_ALSO] File#lstat, File#atime, File#mtime

flock(operation) -> 0 | false[permalink][rdoc]

ファイルをロックします。

ロックを取得するまでブロックされます。 ロックの取得に成功した場合は 0 を返します。 File::LOCK_NB (ノンブロッキング) を指定すると、本来ならブロックされる場合に ブロックされずに false を返すようになります。

[PARAM] operation:
ロックに対する操作の種類を示す定数を指定します。 どのような定数が利用可能かは以下を参照して下さい。
[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
operation に不正な整数を与えた場合などに発生します。

引数 operation に有効な定数は以下の通りです。定数は File::Constants で定義されていますが、 File クラスの親クラスの IO が File::Constants をインクルードしているので、 これらの定数は File::LOCK_SH などとして参照可能です。

LOCK_SH

共有ロック。複数のプロセスが同時にロックを共有できます。 システムによってはロック対象のファイルは読み込みモード ("r", "r+" など)でオープンされている必要があります。そのよ うなシステムでは読み込み可能でないファイルに対するロックは例外 Errno::EXXX が発生するかもしれません。

LOCK_EX

排他ロック。同時にはただひとつのプロセスだけがロックを保持できます。 システムによってはロック対象のファイルは書き込みモード ("w", "r+" など)でオープンされている必要があります。そのよ うなシステムでは書き込み可能でないファイルに対するロックは例外 Errno::EXXX が発生するかもしれません。

LOCK_UN

アンロック。 この明示的なアンロック以外に、ファイルのcloseやRubyインタプリタの終了 (プロセスの終了)によっても自動的にロック状態は解除されます。

LOCK_NB

ノンブロックモード。 File::LOCK_SH | File::LOCK_NB のように他の指定と or することで指 定します。この指定がない場合、ブロックされる条件での flock の呼び出しはロックが解除されるまでブロックされます。

File::LOCK_NB の指定がある場合、ブロックされる条件での flock は false を返します。

「ブロックされる条件」とは以下のいずれかです。

例1:

# 書き込みロック(write lock)を使用してカウンタを更新。
# ロック前にファイルを切り詰めてしまうので、
# モードに"w"を使ってはいけません。
File.open("counter", File::RDWR|File::CREAT, 0644) {|f|
  f.flock(File::LOCK_EX)
  value = f.read.to_i + 1
  f.rewind
  f.write("#{value}\n")
  f.flush
  f.truncate(f.pos)
}

# 読み込みロック(read lock)を使用してカウンタを読み込み。
File.open("counter", "r") {|f|
  f.flock(File::LOCK_SH)
  p f.read
}

例2:

f = File.open("/tmp/foo", "w")

f.flock(File::LOCK_EX)
puts "locked by process1"

fork {
  f = File.open("/tmp/foo", "r")
  f.flock(File::LOCK_SH)
  puts "locked by process2"
  sleep 5
  puts "unlocked by process2"
}

sleep 5

f.flock(File::LOCK_UN)
puts "unlocked by process1"
sleep 1 # <- 子プロセスが確実に先にロックするための sleep
f.flock(File::LOCK_EX)
puts "re-locked by process1"

=> locked by process1
   unlocked by process1
   locked by process2
   unlocked by process2
   re-locked by process1
lstat -> File::Stat[permalink][rdoc]

ファイルの状態を含む File::Stat オブジェクトを生成して返します。 シンボリックリンクに関してリンクそのものの情報を返します。 lstat(2) を実装していないシステムでは、IO#statと同じです。

[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。
[EXCEPTION] IOError:
自身が close されている場合に発生します。

[SEE_ALSO] IO#stat, File.stat, File.lstat

mtime -> Time[permalink][rdoc]

最終更新時刻を Time オブジェクトとして返します。

[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。

[SEE_ALSO] File#lstat, File#atime, File#ctime

path -> String[permalink][rdoc]
to_path -> String

オープン時に使用したパスを文字列で返します。

File.new("testfile").path               #=> "testfile"
File.new("/tmp/../tmp/xxx", "w").path   #=> "/tmp/../tmp/xxx"
size -> Integer[permalink][rdoc]

ファイルのサイズを返します。

例:

File.open("/dev/null") do |f|
  f.size   #=> 0
end
[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。

[SEE_ALSO] File#lstat

truncate(length) -> 0[permalink][rdoc]

ファイルのサイズを最大 length バイトにします。

サイズの変更に成功すれば 0 を返します。失敗した場合は例外 Errno::EXXX が発生します。

[EXCEPTION] IOError:
自身が書き込み用にオープンされていなければ発生します。
[EXCEPTION] Errno::EXXX:
サイズの変更に失敗した場合に発生します。

定数

ALT_SEPARATOR -> "\\" | nil[permalink][rdoc]

システムのファイルパスのセパレータが SEPARATOR と異なる場合 に設定されます。MS-DOS などでは "\\" です。UNIX や Cygwin などでは nil です。

PATH_SEPARATOR -> ";" | ":"[permalink][rdoc]

PATH 環境変数の要素のセパレータです。UNIX では ":" MS-DOS な どでは ";" です。

SEPARATOR -> "/"[permalink][rdoc]
Separator -> "/"

ファイルパスのセパレータです。ファイルを扱うメソッドにパス名を渡す 場合などスクリプト内のパス名は環境によらずこのセパレータで統一され ます。値は "/" です。