class

Dir

Inherits Iterable / Enumerable / Reference / Object

Objects of class Dir are directory streams representing directories in the underlying file system. They provide a variety of ways to list directories and their contents.

The directory used in these examples contains the two regular files (config.h and main.rb), the parent directory (..), and the directory itself (.).

See also: File.

Constructors

new(path : Path | String)

Returns a new directory object for the named directory.

Source
open(path : Path | String) : self

Alias for new(path)

Source

Class methods

cd(path : Path | String) : String

Changes the current working directory of the process to the given string.

Source
cd(path : Path | String, &)

Changes the current working directory of the process to the given string and invokes the block, restoring the original working directory when the block exits.

Source
children(dirname : Path | String) : Array(String)

See #children.

Source
current

Returns an absolute path to the current working directory.

The result is similar to the shell commands pwd (POSIX) and cd (Windows).

On POSIX systems, it respects the environment value $PWD if available and if it points to the current working directory.

Source
delete(path : Path | String) : Nil

Removes the directory at path. Raises File::Error on failure.

On Windows, also raises File::Error if path points to a directory that is a reparse point, such as a symbolic link. Those directories can be deleted using File.delete instead.

Source
delete?(path : Path | String) : Bool

Removes the directory at path, or returns false if the directory does not exist. Raises File::Error on other kinds of failure.

On Windows, also raises File::Error if path points to a directory that is a reparse point, such as a symbolic link. Those directories can be deleted using File.delete? instead.

Source
each(dirname : Path | String, & : String -> )

See #each.

Source
each_child(dirname : Path | String, & : String -> )

See #each_child.

Source
empty?(path : Path | String) : Bool

Returns true if the directory at path is empty, otherwise returns false. Raises File::NotFoundError if the directory at path does not exist.

Dir.mkdir("bar")
Dir.empty?("bar") # => true
File.write("bar/a_file", "The content")
Dir.empty?("bar") # => false
Source
entries(dirname : Path | String) : Array(String)

See #entries.

Source
exists?(path : Path | String) : Bool

Returns true if the given path exists and is a directory

Dir.mkdir("testdir")
Dir.exists?("testdir") # => true
Source
mkdir(path : Path | String, mode : Int32 = 511) : Nil

Creates a new directory at the given path. The linux-style permission mode can be specified, with a default of 777 (0o777).

NOTE: mode is ignored on windows.

Dir.mkdir("testdir")
Dir.exists?("testdir") # => true
Source
mkdir_p(path : Path | String, mode : Int32 = 511) : Nil

Creates a new directory at the given path, including any non-existing intermediate directories. The linux-style permission mode can be specified, with a default of 777 (0o777).

Source
open(path : Path | String, & : self -> )

Opens a directory and yields it, closing it at the end of the block. Returns the value of the block.

Source
tempdir

Returns the tmp dir used for tempfile.

Dir.tempdir # => "/tmp"
Source

Instance methods

children

Returns an array containing all of the filenames except for . and .. in the given directory.

Source
close

Closes the directory stream.

Source
each

Calls the block once for each entry in this directory, passing the filename of each entry as a parameter to the block.

Dir.mkdir("testdir")
File.write("testdir/config.h", "")

d = Dir.new("testdir")
d.each { |x| puts "Got #{x}" }

produces:

Got .
Got ..
Got config.h
Source
each

Must return an Iterator over the elements in this collection.

Source
each_child

Calls the block once for each entry except for . and .. in this directory, passing the filename of each entry as a parameter to the block.

Dir.mkdir("testdir")
File.write("testdir/config.h", "")

d = Dir.new("testdir")
d.each_child { |x| puts "Got #{x}" }

produces:

Got config.h
Source
each_child

Returns an iterator over of the all entries in this directory except for . and ...

See #each_child(&)

Dir.mkdir("test")
File.touch("test/foo")
File.touch("test/bar")

dir = Dir.new("test")
iter = d.each_child

iter.next # => "foo"
iter.next # => "bar"
Source
entries

Returns an array containing all of entries in the given directory including "." and "..".

Dir.mkdir("testdir")
File.touch("testdir/file_1")
File.touch("testdir/file_2")

Dir.new("testdir").entries # => ["..", "file_1", "file_2", "."]
Source
info

This method is faster than .info and avoids race conditions if a Dir is already open on POSIX systems, but not necessarily on windows.

Source
inspect(io : IO) : Nil

Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.

class Person
  def initialize(@name : String, @age : Int32)
  end
end

Person.new("John", 32).inspect # => #<Person:0x10fd31f20 @name="John", @age=32>
Source
path

Returns the path of this directory.

Dir.mkdir("testdir")
dir = Dir.new("testdir")
Dir.mkdir("testdir/extendeddir")
dir2 = Dir.new("testdir/extendeddir")

dir.path  # => "testdir"
dir2.path # => "testdir/extendeddir"
Source
pretty_print(pp)
Source
read

Reads the next entry from dir and returns it as a string. Returns nil at the end of the stream.

d = Dir.new("testdir")
array = [] of String
while file = d.read
  array << file
end
array.sort # => [".", "..", "config.h"]
Source
rewind

Repositions this directory to the first entry.

Source
to_s(io : IO) : Nil

Appends a short String representation of this object which includes its class name and its object address.

class Person
  def initialize(@name : String, @age : Int32)
  end
end

Person.new("John", 32).to_s # => #<Person:0x10a199f20>
Source