Ruby 2.0.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Fileクラス
クラスの継承リスト: File < IO < Enumerable < File::Constants < Object < Kernel < BasicObject
ファイルアクセスのためのクラスです。
通常 Kernel.#open または File.open を使って生成します。 IO クラスがインクルードしている File::Constants は File クラスに関係する定数を 格納したモジュールです。 また File::Stat は stat 構造体( stat(2) 参照)を表すクラスです。
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]最終アクセス時刻を返します。
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"
[SEE_ALSO] File.dirname, File.extname
blockdev?(path) -> bool
[permalink][rdoc]FileTest.#blockdev? と同じです。
chardev?(path) -> bool
[permalink][rdoc]FileTest.#chardev? と同じです。
chmod(mode, *filename) -> Integer
[permalink][rdoc]ファイルのモードを mode に変更します。モードを変更したファイ ルの数を返します。
chown(owner, group, *filename) -> Integer
[permalink][rdoc]ファイルのオーナーとグループを変更します。スーパーユーザだけがファ イルのオーナーとグループを変更できます。変更を行ったファイルの数を 返します。
ctime(filename) -> Time
[permalink][rdoc]状態が最後に変更された時刻を返します。 状態の変更とは chmod などによるものです。
delete(*filename) -> Integer
[permalink][rdoc]unlink(*filename) -> Integer
ファイルを削除します。削除したファイルの数を返します。 削除に失敗した場合は例外 Errno::EXXX が発生します。
このメソッドは通常ファイルの削除用で、ディレクトリの削除には Dir.rmdir を使います。
directory?(path) -> bool
[permalink][rdoc]FileTest.#directory? と同じです。
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"
[SEE_ALSO] File.basename, File.extname
executable?(path) -> bool
[permalink][rdoc]FileTest.#executable? と同じです。
executable_real?(path) -> bool
[permalink][rdoc]FileTest.#executable_real? と同じです。
exist?(path) -> bool
[permalink][rdoc]exists?(path) -> bool
FileTest.#exist? と同じです。
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"
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") # => ""
[SEE_ALSO] File.basename, File.dirname
file?(path) -> bool
[permalink][rdoc]FileTest.#file? と同じです。
fnmatch(pattern, path, flags = 0) -> bool
[permalink][rdoc]fnmatch?(pattern, path, flags = 0) -> bool
ファイル名のパターンマッチ fnmatch(3) を行います。 path が pattern にマッチすれば真を返します。そうでない場合には false を返します。
%w(foo foobar bar).each {|f| p File.fnmatch("foo*", f) } # => true true false
引数 flags に指定できる定数は以下のとおりです。 これらの定数は File::Constants で定義されていますが、 File クラスの親クラスの IO が File::Constants をインクルードしているので、 これらの定数は File::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
ワイルドカード `*', `?', `[]' が `/' にマッチしなくなります。 シェルのパターンマッチにはこのフラグが使用されています。
p File.fnmatch('*', '/', File::FNM_PATHNAME) # => false p File.fnmatch('?', '/', File::FNM_PATHNAME) # => false p File.fnmatch('[/]', '/', File::FNM_PATHNAME) # => false
アルファベットの大小文字を区別せずにパターンマッチを行います。
p File.fnmatch('A', 'a', File::FNM_CASEFOLD) # => true
ワイルドカード `*', `?', `[]' が先頭の `.' にマッチするようになります。
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
{} 内のコンマで区切られた文字列の組合せにマッチするようになります。 例えば、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]ファイルのタイプを表す文字列を返します。
文字列は以下のうちのいずれかです。File.lstat(filename).ftype と同じです。 シンボリックリンクに対して "link" を返します。
grpowned?(path) -> bool
[permalink][rdoc]FileTest.#grpowned? と同じです。
identical?(filename1, filename2) -> bool
[permalink][rdoc]FileTest.#identical? と同じです。
join(*item) -> String
[permalink][rdoc]File::SEPARATORを間に入れて文字列を連結します。
[item, item, ...].join(File::SEPARATOR)
と同じです。DOSISH 対応で環境依存になる予定です。
lchmod(mode, *filename) -> Integer
[permalink][rdoc]File.chmod と同様ですが、シンボリックリンクに関してリンクそのものの モードを変更します。
lchown(owner, group, *filename) -> Integer
[permalink][rdoc]File#chown と同様ですが、 シンボリックリンクに関してリンクそのもののオーナー、 グループを変更します。
link(old, new) -> 0
[permalink][rdoc]old を指す new という名前のハードリンクを 生成します。old はすでに存在している必要があります。 ハードリンクに成功した場合は 0 を返します。
失敗した場合は例外 Errno::EXXX が発生します。
lstat(filename) -> File::Stat
[permalink][rdoc]File.statと同様ですが、シンボリックリンクに関してリンクそのものの 情報を File::Stat として返します。lstat(2) を実装していないシステムでは、File.stat と同じです。
[SEE_ALSO] IO#stat, File#lstat
mtime(filename) -> Time
[permalink][rdoc]最終更新時刻を返します。
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 オブジェクトを引数として ブロックを実行します。ブロックの実行が終了すると、ファイルは自動的に クローズされます。ブロックの実行結果を返します。
owned?(path) -> bool
[permalink][rdoc]FileTest.#owned? と同じです。
path(filename) -> String
[permalink][rdoc]指定されたファイル名を文字列で返します。filename が文字列でない場合は、to_path メソッドを呼びます。
pipe?(path) -> bool
[permalink][rdoc]FileTest.#pipe? と同じです。
readable?(path) -> bool
[permalink][rdoc]FileTest.#readable? と同じです。
readable_real?(path) -> bool
[permalink][rdoc]FileTest.#readable_real? と同じです。
readlink(path) -> String
[permalink][rdoc]シンボリックリンクのリンク先のパスを文字列で返します。
realdirpath(pathname, basedir = nil) -> String
[permalink][rdoc]与えられた pathname に対応する絶対パスを返します。
pathname の最後のコンポーネントは存在していなくても例外は発生しません。
realpath(pathname, basedir = nil) -> String
[permalink][rdoc]与えられた pathname に対応する絶対パスを返します。
pathname の全てのコンポーネントは存在しなければなりません。
rename(from, to) -> 0
[permalink][rdoc]ファイルの名前を変更します。ディレクトリが異なる場合には移動も行い ます。rename(2) を参照してください。移動先のファ イルが存在する時には上書きされます。
ファイルの移動に成功した場合 0 を返します。失敗した場合は例外 Errno::EXXX が発生します。
setgid?(path) -> bool
[permalink][rdoc]FileTest.#setgid? と同じです。
setuid?(path) -> bool
[permalink][rdoc]FileTest.#setuid? と同じです。
size(path) -> Integer
[permalink][rdoc]FileTest.#size と同じです。
size?(path) -> bool
[permalink][rdoc]FileTest.#size? と同じです。
socket?(path) -> bool
[permalink][rdoc]FileTest.#socket? と同じです。
split(pathname) -> [String]
[permalink][rdoc]pathname を dirname とbasename に分割して、2 要 素の配列を返します。
[File.dirname(pathname), File.basename(pathname)]
と同じです。
stat(filename) -> File::Stat
[permalink][rdoc]filename の情報を含む File::Stat オブジェクトを生成し て返します。
[SEE_ALSO] IO#stat, File#lstat
sticky?(path) -> bool
[permalink][rdoc]FileTest.#sticky? と同じです。
symlink(old, new) -> 0
[permalink][rdoc]old への new という名前のシンボリックリンクを生成します。
シンボリックリンクの作成に成功すれば 0 を返します。失敗した場合は 例外 Errno::EXXX が発生します。
symlink?(path) -> bool
[permalink][rdoc]FileTest.#symlink? と同じです。
truncate(path, length) -> 0
[permalink][rdoc]path で指定されたファイルのサイズを最大 length バイト にします。
サイズの変更に成功すれば 0 を返します。失敗した場合は例外 Errno::EXXX が発生します。
umask -> Integer
[permalink][rdoc]現在の umask の値を返します。
[SEE_ALSO] umask(2)
umask(umask) -> Integer
[permalink][rdoc]umask を変更します。変更前の umask の値を返します。
[SEE_ALSO] umask(2)
utime(atime, mtime, *filename) -> Integer
[permalink][rdoc]ファイルの最終アクセス時刻と更新時刻を変更します。変更したファイル の数を返します。変更に失敗した場合は例外 Errno::EXXX が発生 します。
world_readable?(path) -> Integer | nil
[permalink][rdoc]path が全てのユーザから読めるならばそのファイルのパーミッションを表す 整数を返します。そうでない場合は nil を返します。
整数の意味はプラットフォームに依存します。
例:
m = File.world_readable?("/etc/passwd") "%o" % m # => "644"
world_writable?(path) -> bool
[permalink][rdoc]path が全てのユーザから書き込めるならば、そのファイルのパーミッションを表す 整数を返します。そうでない場合は nil を返します。
整数の意味はプラットフォームに依存します。
例:
m = File.world_writable?("/tmp") "%o" % m #=> "777"
writable?(path) -> bool
[permalink][rdoc]FileTest.#writable? と同じです。
writable_real?(path) -> bool
[permalink][rdoc]FileTest.#writable_real? と同じです。
zero?(path) -> bool
[permalink][rdoc]FileTest.#zero? と同じです。
atime -> Time
[permalink][rdoc]最終アクセス時刻を Time オブジェクトとして返します。
[SEE_ALSO] File#lstat, File#ctime, File#mtime
chmod(mode) -> 0
[permalink][rdoc]ファイルのモードを指定された mode に変更します。
モードの変更に成功した場合は 0 を返します。失敗した場合は例外 Errno::EXXX が発生し ます。
例:
f = File.new("out", "w"); f.chmod(0644) #=> 0
chown(owner, group) -> 0
[permalink][rdoc]ファイルのオーナーとグループを変更します。
適切な権限があればファイルのオーナーとグループを変更できます。 所有者の変更に成功した場合は 0 を返します。変更に失敗した場合は 例外 Errno::EXXX が発生します。
ctime -> Time
[permalink][rdoc]状態が最後に変更された時刻を Time オブジェクトとして返します。状態の変更とは chmod などによるものです。
[SEE_ALSO] File#lstat, File#atime, File#mtime
flock(operation) -> 0 | false
[permalink][rdoc]ファイルをロックします。
ロックを取得するまでブロックされます。 ロックの取得に成功した場合は 0 を返します。 File::LOCK_NB (ノンブロッキング) を指定すると、本来ならブロックされる場合に ブロックされずに false を返すようになります。
引数 operation に有効な定数は以下の通りです。定数は File::Constants で定義されていますが、 File クラスの親クラスの IO が File::Constants をインクルードしているので、 これらの定数は File::LOCK_SH などとして参照可能です。
共有ロック。複数のプロセスが同時にロックを共有できます。 システムによってはロック対象のファイルは読み込みモード ("r", "r+" など)でオープンされている必要があります。そのよ うなシステムでは読み込み可能でないファイルに対するロックは例外 Errno::EXXX が発生するかもしれません。
排他ロック。同時にはただひとつのプロセスだけがロックを保持できます。 システムによってはロック対象のファイルは書き込みモード ("w", "r+" など)でオープンされている必要があります。そのよ うなシステムでは書き込み可能でないファイルに対するロックは例外 Errno::EXXX が発生するかもしれません。
アンロック。 この明示的なアンロック以外に、ファイルのcloseやRubyインタプリタの終了 (プロセスの終了)によっても自動的にロック状態は解除されます。
ノンブロックモード。 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と同じです。
[SEE_ALSO] IO#stat, File.stat, File.lstat
mtime -> Time
[permalink][rdoc]最終更新時刻を Time オブジェクトとして返します。
[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
[SEE_ALSO] File#lstat
truncate(length) -> 0
[permalink][rdoc]ファイルのサイズを最大 length バイトにします。
サイズの変更に成功すれば 0 を返します。失敗した場合は例外 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 -> "/"
ファイルパスのセパレータです。ファイルを扱うメソッドにパス名を渡す 場合などスクリプト内のパス名は環境によらずこのセパレータで統一され ます。値は "/" です。