class File

[edit]

要約

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

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

目次

特異メソッド
インスタンスメソッド
定数

継承しているメソッド

IOから継承しているメソッド
Enumerableから継承しているメソッド

特異メソッド

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

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

absolute_path?(file_name) -> bool[permalink][rdoc][edit]

file_name が絶対パスなら true を、そうでなければ false を返します。

[PARAM] file_name:
ファイル名を表す文字列を指定します。文字列でない場合は、to_path メソッド、to_str メソッドの順で暗黙の型変換が試みられます。
[EXCEPTION] TypeError:
引数に文字列以外の(暗黙の型変換が行えない)オブジェクトを指定した場合に発生します。


File.absolute_path?("//foo/bar\\baz") # => true
File.absolute_path?("C:foo\\bar")     # => false
File.absolute_path?("~")              # => false

# プラットフォームが cygwin、mswin、mingw の場合
File.absolute_path?("C:\\foo\\bar")   # => true
File.absolute_path?("/foo/bar\\baz")  # => false

# プラットフォームが上記以外の場合
File.absolute_path?("C:\\foo\\bar")   # => false
File.absolute_path?("/foo/bar\\baz")  # => true
atime(filename) -> Time[permalink][rdoc][edit]

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

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


File.atime(__FILE__) # => 2017-11-28 22:38:44 +0900
basename(filename, suffix = "") -> String[permalink][rdoc][edit]

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

birthtime(filename) -> Time[permalink][rdoc][edit]

作成された時刻を返します。

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。
[EXCEPTION] NotImplementedError:
Windows のような birthtime のない環境で発生します。


File.birthtime("testfile")   #=> Wed Apr 09 08:53:13 CDT 2003
blockdev?(path) -> bool[permalink][rdoc][edit]

FileTest.#blockdev? と同じです。

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

[SEE_ALSO] FileTest.#blockdev?

chardev?(path) -> bool[permalink][rdoc][edit]

FileTest.#chardev? と同じです。

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

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

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

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

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


IO.write("test.txt", "test")
File.chown(502, 12, "test.txt")
File.stat("test.txt").uid # => 502

[SEE_ALSO] File#chown

ctime(filename) -> Time[permalink][rdoc][edit]

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

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

IO.write("testfile", "test")
File.ctime("testfile") # => 2017-11-30 22:40:49 +0900
File.chmod(0755, "testfile")
File.ctime("testfile") # => 2017-11-30 22:42:12 +0900
delete(*filename) -> Integer[permalink][rdoc][edit]
unlink(*filename) -> Integer

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

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

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


IO.write("test.txt", "test")
p File.exist?("test.txt")  # => true
p File.delete("test.txt")   # => 1
p File.exist?("test.txt")  # => false
begin
  File.delete("test.txt")
rescue
  p $!  # => #<Errno::ENOENT: No such file or directory @ unlink_internal - test.txt>
end
directory?(path) -> bool[permalink][rdoc][edit]

FileTest.#directory? と同じです。

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

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"

level が指定されたときは、最後のlevel個を取り除いた文字列を返します。

levelを指定する例

File.dirname("/home/gumby/work/ruby.rb", 2) # => "/home/gumby"
File.dirname("/home/gumby/work/ruby.rb", 4) # => "/"
[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] level:
末尾からいくつ取り除くかを指定します。
[EXCEPTION] ArgumentError:
level が負の場合に発生します。

[SEE_ALSO] File.basename, File.extname

zero?(path) -> bool[permalink][rdoc][edit]
empty?(path) -> bool

FileTest.#zero? と同じです。

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

FileTest.#executable? と同じです。

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

FileTest.#executable_real? と同じです。

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

FileTest.#exist? と同じです。

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

このメソッドは Ruby 2.1 から deprecated です。File.exist? を使用してください。

expand_path(path, default_dir = '.') -> String[permalink][rdoc][edit]

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][edit]

ファイル名 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")            # => ""

# Windows の場合
p File.extname("foo.")            # => ""
# Windows 以外の場合
p File.extname("foo.")            # => "."
[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.basename, File.dirname

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

FileTest.#file? と同じです。

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

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

[PARAM] pattern:
パターンを文字列で指定します。ワイルドカードとして `*', `**`, `?', `[]', `{}' が使用できます。


%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
FNM_EXTGLOB

{} 内のコンマで区切られた文字列の組合せにマッチするようになります。例えば、foo{a,b,c} は fooa, foob, fooc に展開されそれぞれに対してマッチ判定を行います。

括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は foo, barfoo, barbar のそれぞれにマッチします。


p File.fnmatch('foo{a,b,c}', 'fooa', File::FNM_EXTGLOB)           # => true
p File.fnmatch('{foo,bar{foo,bar}}', 'barfoo', File::FNM_EXTGLOB) # => true
ftype(filename) -> String[permalink][rdoc][edit]

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

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

  • "file"
  • "directory"
  • "characterSpecial"
  • "blockSpecial"
  • "fifo"
  • "link"
  • "socket"
  • "unknown"
[PARAM] filename:
ファイル名を表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
情報の取得に失敗した場合に発生します。


File.ftype("testfile")            # => "file"
File.ftype("/dev/tty")            # => "characterSpecial"
File.ftype("/tmp/.X11-unix/X0")   # => "socket"
grpowned?(path) -> bool[permalink][rdoc][edit]

FileTest.#grpowned? と同じです。

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

FileTest.#identical? と同じです。

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

File::SEPARATORを間に入れて文字列を連結します。DOSISH 対応で環境依存になる予定です。

[PARAM] item:
連結したいディレクトリ名やファイル名を文字列(もしくは文字列を要素に持つ配列)で与えます。文字列AとBを連結する際に、Aの末尾の文字とBの先頭の文字がFile::SEPARATORであった場合には、まずこれらを削除した上で改めてFile::SEPARATORを間に入れて連結します。引数の中に配列がある場合は配列要素を再帰的に展開します。空の配列は空文字列に変換されます。配列・文字列以外のオブジェクトを指定した場合は、まず to_str メソッド、次に to_path メソッドにより暗黙の型変換を試みます。引数がない場合には空文字列を生成して返します。
[EXCEPTION] TypeError:
引数の中に文字列以外の(暗黙の型変換が行えない)オブジェクトが存在した場合に発生します。
[EXCEPTION] ArgumentError:
引数の中に、配列要素が自身を含むような無限にネストした配列や、ヌル文字を含む文字列が存在した場合に発生します。


File.join("a","b")                        # => "a/b"
File.join("a/","b")                       # => "a/b"
File.join("a/","/b")                      # => "a/b"
File.join("a","/b")                       # => "a/b"
File.join("a", ["b", ["c", ["d"]]])       # => "a/b/c/d"
File.join("", "a", ["b", ["c", ["d"]]])   # => "/a/b/c/d"
File.join([])                             # => ""
File.join                                 # => ""
lchmod(mode, *filename) -> Integer[permalink][rdoc][edit]

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

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


IO.write("testfile", "test")
File.symlink("testfile", "testlink")
File.lstat("testlink").ftype            # => "link"
File.lchmod(0744, "testlink")
File.stat("testlink").mode.to_s(8)      # => "100644"
File.lstat("testlink").mode.to_s(8)     # => "120744"
lchown(owner, group, *filename) -> Integer[permalink][rdoc][edit]

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

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


IO.write("testfile", "test")
File.symlink("testfile", "testlink")
File.chown(501, -1, "testfile")
File.lstat("testlink").ftype    # => "link"
File.lchown(0, -1, "testlink")
File.stat("testlink").uid       # => 501
File.lstat("testlink").uid      # => 0

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

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

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


IO.write("testfile", "test")
File.link("testfile", "testlink")   # => 0
IO.read("testlink")                 # => "test"
lstat(filename) -> File::Stat[permalink][rdoc][edit]

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

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


# link.rb は t.rb のシンボリックリンク
File.lstat("link.rb") == File.stat("t.rb") # => false
File.stat("link.rb")  == File.stat("t.rb") # => true

[SEE_ALSO] IO#stat, File#lstat

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

ファイルの最終アクセス時刻と更新時刻を変更します。シンボリックリンクに対しては File.utime と違って、シンボリックそのものを変更します。

[PARAM] atime:
最終アクセス時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] mtime:
更新時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] filename:
ファイル名を表す文字列を指定します。複数指定できます。
[RETURN]
変更したファイルの数を返します。
[EXCEPTION] Errno::EXXX:
変更に失敗した場合に発生します。

[SEE_ALSO] File.utime

mkfifo(file_name, mode = 0666) -> 0[permalink][rdoc][edit]

引数 file_name で指定した名前の FIFO スペシャルファイルを作成します。

[PARAM] file_name:
ファイル名を指定します。
[PARAM] mode:
FIFO の許可モードを数値で指定します。指定したモードは通常のファイル作成と同様にプロセスの umask によって変更されます。作成されたファイルの許可モードは (mode & ~umask) になります。


File.mkfifo("testfile", 0666)
File.ftype("testfile")          # => "fifo"
mtime(filename) -> Time[permalink][rdoc][edit]

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

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


File.mtime(__FILE__) # => 2017-12-03 03:16:22 +0900
new(path, mode = "r", perm = 0666) -> File[permalink][rdoc][edit]
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:
ファイルのオープンに失敗した場合に発生します。
例: File.new による読み込みモードでのファイルオープン

f = File.new("testfile", "r")
f.class # => File
f.close
例: File.open による読み込みモードでのファイルオープン

f = File.open("testfile", "r")
f.class # => File
f.close
例: File.open による書き込みモードでのファイルオープン

File.open("testfile", "w", 0755) { |f| f.print "test" }
File.read("testfile")  # => "test"
owned?(path) -> bool[permalink][rdoc][edit]

FileTest.#owned? と同じです。

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

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

[PARAM] filename:
ファイル名を表す文字列か to_path メソッドが定義されたオブジェクトを指定します。


require 'pathname'

class MyPath
  def initialize(path)
    @path = path
  end
  def to_path
    File.absolute_path(@path)
  end
end

File.path("/dev/null")          # => "/dev/null"
File.path(Pathname("/tmp"))     # => "/tmp"
File.path(MyPath.new("."))      # => "/Users/user/projects/txt"
pipe?(path) -> bool[permalink][rdoc][edit]

FileTest.#pipe? と同じです。

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

FileTest.#readable? と同じです。

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

FileTest.#readable_real? と同じです。

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

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

[PARAM] path:
シンボリックリンクを表す文字列を指定します。
[EXCEPTION] Errno::EXXX:
指定された path がシンボリックリンクでない場合や、リンクの読み取りに失敗した場合に発生します。
例:

IO.write("testfile", "test")
File.symlink("testfile", "testlink")   # => 0
File.readlink("testlink")              # => "testfile"
realdirpath(pathname, basedir = nil) -> String[permalink][rdoc][edit]

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

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

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

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

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

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


ENV["HOME"]                     # => "/home/matz"
File.symlink("testfile", "testlink")
File.realpath("testfile")       # => "/home/matz/testfile"
File.realpath("testlink")       # => "/home/matz/testfile"
File.realpath("..", "/tmp")     # => "/"
rename(from, to) -> 0[permalink][rdoc][edit]

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

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

[PARAM] from:
ファイルの名前を文字列で与えます。
[PARAM] to:
新しいファイル名を文字列で与えます。
[EXCEPTION] Errno::EXXX:
失敗した場合に発生します。


begin
  File.rename("testfile", "testfile.bak")   # => 0
  File.rename("testfile", "testfile.bak")
rescue
  # 2回目の rename 時にすでに testfile が存在しないため例外が発生する
  $! # => #<Errno::ENOENT: No such file or directory @ rb_file_s_rename - (testfile, testfile.bak)>
end
setgid?(path) -> bool[permalink][rdoc][edit]

FileTest.#setgid? と同じです。

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

FileTest.#setuid? と同じです。

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

FileTest.#size と同じです。

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

FileTest.#size? と同じです。

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

FileTest.#socket? と同じです。

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

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


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

と同じです。

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

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

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


File.stat("testfile").class   # => File::Stat
File.stat("testfile").mtime   # => 2017-12-10 01:13:56 +0900

[SEE_ALSO] IO#stat, File#lstat

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

FileTest.#sticky? と同じです。

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

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

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

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


File.symlink("testfile", "testlink")   # => 0

FileTest.#symlink? と同じです。

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

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

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

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


IO.write("testfile", "1234567890")
File.truncate("testfile", 5)   # => 0
File.size("testfile")          # => 5
umask -> Integer[permalink][rdoc][edit]

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

[SEE_ALSO] umask(2)

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

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

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


File.umask(0006)   # => 18
File.umask         # => 6

[SEE_ALSO] umask(2)

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

ファイルの最終アクセス時刻と更新時刻を変更します。シンボリックリンクに対しては File.lutime と違って、シンボリックのリンク先を変更します。

[PARAM] atime:
最終アクセス時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] mtime:
更新時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] filename:
ファイル名を表す文字列を指定します。複数指定できます。
[RETURN]
変更したファイルの数を返します。
[EXCEPTION] Errno::EXXX:
変更に失敗した場合に発生します。
例: Time を指定

atime = Time.new(2018, 1, 2, 3, 4, 5)
mtime = Time.new(2018, 2, 3, 4, 5, 6)
File.utime(atime, mtime, "testfile")  # => 1
File.atime("testfile")                # => 2018-01-02 03:04:05 +0900
File.mtime("testfile")                # => 2018-02-03 04:05:06 +0900
例: 経過秒数で指定

File.utime(1, 2, "testfile")  # => 1
File.atime("testfile")                # => 1970-01-01 09:00:01 +0900
File.mtime("testfile")                # => 1970-01-01 09:00:02 +0900

[SEE_ALSO] File.lutime

world_readable?(path) -> Integer | nil[permalink][rdoc][edit]

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

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

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


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

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

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

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


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

FileTest.#writable? と同じです。

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

FileTest.#writable_real? と同じです。

[PARAM] path:
パスを表す文字列を指定します。

インスタンスメソッド

atime -> Time[permalink][rdoc][edit]

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

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

IO.write("testfile", "test")
File.open("testfile") { |f| f.atime } # => 2017-12-21 22:58:17 +0900

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

birthtime -> Time[permalink][rdoc][edit]

作成された時刻を Time オブジェクトとして返します。

[EXCEPTION] IOError:
自身が close されている場合に発生します。
[EXCEPTION] Errno::EXXX:
ファイルの時刻の取得に失敗した場合に発生します。
[EXCEPTION] NotImplementedError:
Windows のような birthtime のない環境で発生します。
File.new("testfile").birthtime   #=> Wed Apr 09 08:53:14 CDT 2003

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

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

ファイルのモードを指定された 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][edit]

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

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

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


File.open("testfile") { |f| f.chown(502, 1000) }  # => 0
File.stat("testfile").uid                         # => 502
File.stat("testfile").gid                         # => 1000

[SEE_ALSO] File.chown

ctime -> Time[permalink][rdoc][edit]

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

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

IO.write("testfile", "test")
File.open("testfile") { |f| f.ctime } # => 2017-12-21 22:58:17 +0900

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

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

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

ロックを取得するまでブロックされます。ロックの取得に成功した場合は 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][edit]

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

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


# testlink は testfile のシンボリックリンク
File.open("testlink") do |f|
    p f.lstat == File.stat("testfile")  # => false
    p f.stat == File.stat("testfile")   # => true
end

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

mtime -> Time[permalink][rdoc][edit]

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

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

IO.write("testfile", "test")
File.open("testfile") { |f| f.mtime } # => 2017-12-21 22:58:17 +0900

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

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

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

パスは self に対応するファイルを指しているとは限りません。たとえば、ファイルが移動されていたり、削除されていたりする場合です。

[EXCEPTION] IOError:
TMPFILE File::Constants::TMPFILEオプション付きで作成されている場合に発生します。


File.open("testfile") {|f| f.path }                        #=> "testfile"
File.open("/tmp/../tmp/xxx", "w") {|f| f.path }            #=> "/tmp/../tmp/xxx"
File.open("/tmp", File::RDWR | File::TMPFILE){|f| f.path } # IOError: File is unnamed (TMPFILE?)
size -> Integer[permalink][rdoc][edit]

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



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][edit]

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

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

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


IO.write("testfile", "1234567890")
File.open("testfile", "a") do |f|
  f.truncate(5) # => 0
  f.size        # => 5
end

定数

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

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

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

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

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

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