Ruby基礎復習(9) Dirクラス
『パーフェクトRuby』p.208より。
Dirクラスは基本としてカレントディレクトリ情報を持っていて、それを元としてディレクトリ操作ができる。従って多くの操作を特異メソッドで行うことができる。
1Dir.pwd # => "/Users/chroju"
2Dir.chdir("/tmp")
3Dir.pwd # => "/tmp"
4Dir.home # => "/Users/chroju"
ディレクトリに含まれるファイルはDir.entries
で配列として返り、Dir.foreach
でEnumerableとして返る。またDir.glob
により、パターンにマッチするファイルパスを配列で返すこともできる。Dir.glob
はDir[]
と同義である。引数のディレクトリが存在するか確認する場合はDir.exists?
を用いる。
1Dir.entries('.') # => [".", "..", "bar", "foo", "baz"]
2Dir.foreach('.') {|d|
3 p d
4} # => ".", "..", "bar", "foo", "baz"
5Dir.glob('ba*') # => ["bar", "baz"]
6Dir['ba*'] # => ["bar", "baz"]
7Dir.exists?("hoo") # => false
ディレクトリの削除、生成等も特異メソッドにて。
1Dir.mkdir 'foo', 0755 # パーミッション0755でfooディレクトリを生成
2Dir.rmdir 'foo' # fooディレクトリを削除するが、対象ディレクトリは空である必要がある
3Dir.delete 'foo' # Dir.rmdirと同義
4Dir.unlink 'foo' # Dir.rmdirと同義
Dir.open
すると、Dirオブジェクトを取得することができ、インスタンスメソッドによる操作が可能になる。Dirオブジェクトは読み込み位置を持っていて、ディレクトリ内のファイル名を1つずつ読み込ませることができる。
1dir = Dir.open('.')
2dir.path # => "/temp" (現在のファイルパス)
3dir.pos # => 0 (現在の読み込み位置)
4dir.pos = 1 # 読み込み位置を移動
5dir.read # => ".."
6dir.rewind # 読み込み位置を先頭に戻す
7dir.read # => "."
8dir.each {|f| p f} # => ".", "..", "bar", "baz", "foo"