コンテンツにスキップ

ディレクトリ/ファイルの操作

Dir クラス

Dir.mkdir

  • 新しいディレクトリを作成する。
  • ディレクトリの作成に成功すると 0 を返し、失敗すると例外が発生する。
# 作成成功
Dir.mkdir("sample")   # => 0

Dir.mkdir("sample")
# => Errno::EEXIST (File exists @ dir_s_mkdir - sample)

Dir.delete

  • 空のディレクトリを削除する。
  • ディレクトリの削除に成功すると 0 を返し、失敗すると例外が発生する。
  • 以下の別名メソッドがある。
    • Dir.rmdir
    • Dir.umlink
# 削除成功
Dir.delete("sample")  # => 0
Dir.rmdir("sample")   # => 0

# 削除失敗(ディレクトリが空でない時)
Dir.delete("sample")
# => Errno::ENOTEMPTY (Directory not empty @ dir_s_rmdir - sample)
Dir.rmdir("sample")
# => Errno::ENOTEMPTY (Directory not empty @ dir_s_rmdir - sample)

Dir.getwd

  • カレントディレクトリのフルパスを文字列で返す。
  • Dir.pwd は別名メソッド
Dir.getwd   # => "/Users/user/RubyExamination"
Dir.pwd     # => "/Users/user/RubyExamination"

Dir.home

  • 現在のユーザまたは指定されたユーザのホームディレクトリを返す。
Dir.home          # => "/home/vagrant"
Dir.home("root")  # => "/root"

Dir.chdir

  • カレントディレクトリを変更する。
  • ブロックが指定された場合は、ブロックの実行中のみカレントディレクトリを変更する。
Dir.chdir("/var/spool/mail")
p Dir.pwd                    # => "/var/spool/mail"

Dir.chdir("/tmp") do
  p Dir.pwd                  # => "/tmp"
end 
p Dir.pwd                    # => "/var/spool/mail"

Dir.children

  • 指定したディレクトリに含まれるファイルエントリ名のうち、 "."".." をのぞいた配列を返す。
Dir.children('.')     # => ["bar", "foo"]

Dir.empty?

  • 指定したディレクトリが空の場合に真を返す。ディレクトリでない場合や空でない場合に偽を返す。
Dir.empty?('.')       # => false
Dir.empty?(IO::NULL)  # => false

Dir.exist?

  • 指定したディレクトリが存在する場合に真を返す。そうでない場合は、偽を返す。
Dir.exist?(".")      # => true
File.directory?(".") # => true

File クラス

File.new

  • 指定されたファイルをオープンし、File オブジェクトを生成する。デフォルトは読み込みモード(r)で開く。
  • File.open は別名メソッド
f = File.new("testfile", "r")
f.class # => File
f.close

File.delete

  • 指定したファイルを削除する。
  • 削除に成功した場合は削除したファイルの数を返し、削除に失敗した場合は例外が発生する。
  • File.unlink は別名メソッド
# 削除成功
File.delete("text_1.txt", "text2.txt")  # => 2

# 削除失敗
File.delete("text_1.txt")
# => Errno::ENOENT: No such file or directory @ unlink_internal - text_1.txt

File.basename

  • 指定した文字列の一番後ろの / に続く文字列を返す。
  • 引数 suffix が与えられて、かつそれが文字列の末尾に一致するなら、それを取り除いたものを返す。
File.basename("ruby/ruby.c")          # => "ruby.c"
File.basename("ruby/ruby.c", ".c")    # => "ruby"
File.basename("ruby/ruby.c", ".*")    # => "ruby"
File.basename("ruby/ruby.exe", ".*")  # => "ruby"
File.basename("ruby/y.tab.c", ".*")   # => "y.tab"

File.dirname

  • 指定した文字列の一番後ろの / より前の文字列を返す。/ を含まない場合は . を返す。
File.dirname("text.txt")              # => "."
File.dirname("REx/text.txt")          # => "REx"
File.dirname("Desktop/REx/text.txt")  # => "Desktop/REx"

File.chmod

  • 指定したファイルのモードを変更する。
File.chmod(0644, "text.txt")
# => text.txtファイルのモードを「所有者は読み書き可能で実行不可能」「所有グループとその他は読み込みのみ可能で書き込みと実行は不可能」に変更

File.chown

  • 指定したファイルのオーナーとグループを変更する。変更したファイルの数を返す。
  • スーパーユーザだけがファイルのオーナーとグループを変更できる。
File.chown(502, 12, "test.txt")   # => 1
File.stat("test.txt").uid         # => 502

File.directory?

  • ファイルがディレクトリの時に真を返す。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには偽を返す。
Dir.exist?(".")      # => true
File.directory?(".") # => true

File.file?

  • ファイルが通常ファイルの時に真を返す。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには偽を返す。
FileTest.file?('/bin/bash')       # => true
FileTest.file?('/bin')            # => false
FileTest.file?('/no_such_file')   # => false

File.empty?

  • ファイルが存在して、そのサイズが 0 である時に真を返す。そうでない場合、あるいはシステムコールに失敗した場合には偽を返す。
IO.write("zero.txt", "")
Fle.zero?("zero.txt")             # => true
IO.write("nonzero.txt", "1")
File.zero?("nonzero.txt")         # => false