Перейти к содержанию

Ruby/Справочник/Dir

Материал из Викиучебника — открытых книг для открытого мира

Класс Dir

[править]

tmpdir - retrieve temporary directory path $Id: tmpdir.rb,v 1.5.2.1 2005/12/15 15:57:05 matz Exp $


Примеси

Enumerable (all?, any?, collect, detect, each_cons, each_slice, each_with_index, entries, enum_cons, enum_slice, enum_with_index, find, find_all, grep, group_by, include?, index_by, inject, map, max, member?, min, partition, reject, select, sort, sort_by, sum, to_a, to_set, zip),

Windows::DeviceIO (CTL_CODE, DeviceIoControl, FSCTL_SET_COMPRESSION, FSCTL_SET_SPARSE),

Windows::Directory (CreateDirectory, CreateDirectoryEx, CreateDirectoryExW, CreateDirectoryW, FindCloseChangeNotification, FindFirstChangeNotification, FindNextChangeNotification, GetCurrentDirectory, GetCurrentDirectoryW, ReadDirectoryChangesW, RemoveDirectory, RemoveDirectoryW, SetCurrentDirectory, SetCurrentDirectoryW),

Windows::Error (FormatMessage, FormatMessageW, GetLastError, SetErrorMode, SetLastError, SetLastErrorEx, get_last_error),

Windows::File (CopyFile, CopyFileEx, CreateFile, CreateHardLink, DecryptFile, DeleteFile, EncryptFile, GetBinaryType, GetFileAttributes, GetFileAttributesEx, GetFileSize, GetFileSizeEx, GetFileType, GetFullPathName, GetLongPathName, GetShortPathName, LockFile, LockFileEx, ReadFile, ReadFileEx, SetFileAttributes, UnlockFile, UnlockFileEx, WriteFile, WriteFileEx),

Windows::Shell (SHGetFolderPath, SHGetSpecialFolderLocation, SHGetSpecialFolderPath)

Константы

VERSION

Методы класса

[], chdir, chroot, create_junction, delete, empty?, entries, foreach, getwd, glob, junction?, mkdir, new, open, pwd, rmdir, tmpdir, unlink

Методы объекта

close, each, path, pos=, pos, read, rewind, seek, tell


 Dir[ string ] => array

Похоже на вызов dir.glob(string,0).

Dir::chdir

[править]

 Dir.chdir( [ string] ) => 0
 Dir.chdir( [ string] ) {| path | block }  => anObject

Сменяет текущую директорию процесса на указанную в строке. Если вызвано без аргументов, сменяется значение равное HOME, или LOGDIR. SystemCallError (вероятно Errno::ENOENT) появляется когда директории нет.. Если задан блок, ему передается имя нового текущей директории, а блок выполняется с ним в качестве текущей директории. Исходный рабочий каталог восстанавливается при выходе из блока. Возвращаемое значение chdir - это значение блока. Блоки chdir могут быть вложеными, но в многопоточной программе может вылезти ошибка, если поток попытается открыть блок chdir, а другой поток - один.

  Dir.chdir("/var/spool/mail")
  puts Dir.pwd
  Dir.chdir("/tmp") do
    puts Dir.pwd
    Dir.chdir("/usr") do
      puts Dir.pwd
    end
    puts Dir.pwd
  end
  puts Dir.pwd

производит:

  /var/spool/mail
  /tmp
  /usr
  /tmp
  /var/spool/mail

Dir::chroot

[править]

 Dir.chroot( string ) => 0

Изменяет представление процесса корня файловой системы. Только уполномоченные процессы могут её использовать. Не на всех платформах доступна эта функция. На Unix системах, См. chroot(2) для детальной информации.

Dir::create_junction

[править]

 Dir::create_junction(to, from)

Создает символическую ссылку to, связанную с существующим каталогом from. Если каталог уже существует, он должен быть пустым, иначе выдаст ошибку.

Dir::delete

[править]

 Dir.delete( string ) => 0
 Dir.rmdir( string ) => 0
 Dir.unlink( string ) => 0

Удаляет указанную директорию. Вызывается ошибка SystemCallError если директория не пуста.

Dir::empty?

[править]

 Dir::empty?(path)

Возвращает результат проверки пустоты директории path. Возвращает false если path это не директория, или имеет файлы отличающиеся от '.' или '..'.

Dir::entries

[править]

 Dir.entries( dirname ) => array

Возвращает массив содержащий все имена файлов в указанной директории. Будет вызван SystemCallError если директории не существует.

  Dir.entries("testdir")   #=> [".", "..", "config.h", "main.rb"]

Dir::foreach

[править]

 Dir.foreach( dirname ) {| filename | block }  => nil

Вызывает блок один раз для каждой записи в указанной директории, передавая имя файла каждой записи в качестве параметра в блок.

  Dir.foreach("testdir") {|x| puts "Got #{x}" }

производит:

  Got .
  Got ..
  Got config.h
  Got main.rb

Dir::getwd

[править]

 Dir.getwd => string
 Dir.pwd => string

Возвращает путь к директории исполняемого процесса.

  Dir.chdir("/tmp")   #=> 0
  Dir.getwd           #=> "/tmp"

Dir::glob

[править]

 Dir.glob( string, [flags] ) => array
 Dir.glob( string, [flags] ) {| filename | block }  => nil

Возвращает найденные имена файлов, расширяя шаблон, указанный в string, или как array, или как параметры блока. Обратите внимание, что этот шаблон не является регулярным выражением (он ближе к оболочке glob). См. File::fnmatch для обозначение параметра flags.

Соответствует любому файлу. Может быть ограничено другими значениями в glob.

* - будет соответствовать всем файлам;

c* - будет соответствовать всем файлам, начинающимся с c;

*c - будет соответствовать всем файлам, заканчивающимся на c;

c - будет соответствовать всем файлам, имеющими c (включая начальную или конечную).

Эквивалентно / .* /x в регулярном выражении. Соответствует рекурсивным каталогам. Соответствует любому знаку. Эквивалентно /.{1}/ в регулярном выражении. Соответствует любому символу в set. Ведет себя точно так же, как наборы символов в регулярном выражении, включая установление отрицания ([^a-z]). Соответствует литералам p или литералам q. Соответствующие литералы могут иметь длину более одного символа. Можно указать более двух литералов. Эквивалентно чередованию шаблонов в регулярном выражении.

Убирает следующий метасимвол.
  Dir["config.?"]                     #=> ["config.h"]
  Dir.glob("config.?")                #=> ["config.h"]
  Dir.glob("*.[a-z][a-z]")            #=> ["main.rb"]
  Dir.glob("*.[^r]*")                 #=> ["config.h"]
  Dir.glob("*.{rb,h}")                #=> ["main.rb", "config.h"]
  Dir.glob("*")                       #=> ["config.h", "main.rb"]
  Dir.glob("*", File::FNM_DOTMATCH)   #=> [".", "..", "config.h", "main.rb"]
  rbfiles = File.join("**", "*.rb")
  Dir.glob(rbfiles)                   #=> ["main.rb",
                                           "lib/song.rb",
                                           "lib/song/karaoke.rb"]
  libdirs = File.join("**", "lib")
  Dir.glob(libdirs)                   #=> ["lib"]
  librbfiles = File.join("**", "lib", "**", "*.rb")
  Dir.glob(librbfiles)                #=> ["lib/song.rb",
                                           "lib/song/karaoke.rb"]
  librbfiles = File.join("**", "lib", "*.rb")
  Dir.glob(librbfiles)                #=> ["lib/song.rb"]

Dir::junction?

[править]

 Dir::junction?(path)

Возвращает является ли path соединением или нет.

Dir::mkdir

[править]

 Dir.mkdir( string [, integer] ) => 0

Создает папку, имя которой указано в string, с разрешениями, заданными необязательным параметром как Integer. TРазрешения могут быть изменены значением File::umask, и игнорируются на NT. Вызывает SystemCallError если директория не может быть создана. См. Также обсуждение разрешений в документации по классу для File.

Dir::new

[править]

 Dir.new( string ) -> aDir

Возвращает новый объект директории.

Dir::open

[править]

 Dir.open( string ) => aDir
 Dir.open( string ) {| aDir | block } => anObject

Без блока, open это синоним к Dir::new. Если присутствует блок, он передается в Dir как параметр. Директория закрывается при окончании блока, и Dir::open возвращает значения блока.

Dir::pwd

[править]

 Dir.getwd => string
 Dir.pwd => string

Возвращает путь к директории исполняемого процесса.

  Dir.chdir("/tmp")   #=> 0
  Dir.getwd           #=> "/tmp"

Dir::rmdir

[править]

 Dir.delete( string ) => 0
 Dir.rmdir( string ) => 0
 Dir.unlink( string ) => 0

Удаляет указанную директорию. Вызывает субкласс SystemCallError если директория не пуста.

Dir::tmpdir

[править]

 Dir::tmpdir()

Возвращает временный путь к файловой системе операционной системы.

[править]

 Dir.delete( string ) => 0
 Dir.rmdir( string ) => 0
 Dir.unlink( string ) => 0

Удаляет указанную директорию. Вызывает подкласс SystemCallError если директория не пуста.

Dir#close

[править]

 dir.close => nil

Закрывает директорию. Дальнейшие попытки вызова dir вызовут IOError.

  d = Dir.new("testdir")
  d.close   #=> nil

Dir#each

[править]

 dir.each { |filename| block }  => dir

Вызывает блок к каждому содержимому директории, передает значение файла/папки как входной параметр.

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

производит:

  Got .
  Got ..
  Got config.h
  Got main.rb

Dir#path

[править]

 dir.path => string or nil

Возвращает значение директори записанной в dir.

  d = Dir.new("..")
  d.path   #=> ".."

 dir.pos => integer
 dir.tell => integer

Возвращает текущее положение в dir. См. также Dir#seek.

  d = Dir.new("testdir")
  d.tell   #=> 0
  d.read   #=> "."
  d.tell   #=> 12

Dir#pos=

[править]

 dir.pos( integer ) => integer

Синоним для Dir#seek, но возвращает параметр положения.

  d = Dir.new("testdir")   #=> #<Dir:0x401b3c40>
  d.read                   #=> "."
  i = d.pos                #=> 12
  d.read                   #=> ".."
  d.pos = i                #=> 12
  d.read                   #=> ".."

Dir#read

[править]

 dir.read => string or nil

Читает следующую запись из dir и возвращает ее как строку. Возвращает nil в конце потока.

  d = Dir.new("testdir")
  d.read   #=> "."
  d.read   #=> ".."
  d.read   #=> "config.h"

Dir#rewind

[править]

 dir.rewind => dir

Переход dir в начало.

  d = Dir.new("testdir")
  d.read     #=> "."
  d.rewind   #=> #<Dir:0x401b3fb0>
  d.read     #=> "."

Dir#seek

[править]

 dir.seek( integer ) => dir

Обращается к определенному месту в dir.integer должен быть значением, возвращаемым в Dir#tell.

  d = Dir.new("testdir")   #=> #<Dir:0x401b3c40>
  d.read                   #=> "."
  i = d.tell               #=> 12
  d.read                   #=> ".."
  d.seek(i)                #=> #<Dir:0x401b3c40>
  d.read                   #=> ".."

Dir#tell

[править]

 dir.pos => integer
 dir.tell => integer

Возвращает текущее положение в dir. См. также Dir#seek.

  d = Dir.new("testdir")
  d.tell   #=> 0
  d.read   #=> "."
  d.tell   #=> 12