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.globDir[]と同義である。引数のディレクトリが存在するか確認する場合は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"