为实现目录流操作而设置的类,它可以依次返回目录中的元素。
Dir[pattern]Dir.glob(pattern)Dir.glob(pattern) {|file| ...}Dir.glob(pattern[, flags]) ((<ruby 1.7 特性>))Dir.glob(pattern[, flags]) {|file| ...} ((<ruby 1.7 特性>))以字符串数组的形式返回通配符匹配结果。若指定了块的话,将以匹配成功的文件为参数,依次计算该块,然后返回nil。
可以一次指定多个pattern,此时需要使用空白(space,tab,换行)或"\0"将它们分割开来。
p Dir.glob("f* b*")
=> ["foo", "bar"]
可用的通配符如下。
*
匹配任何字符串,包括空字符串。
?
匹配任何一个字符。
[ ]
只要匹配方括号中任何一个字符即可。若使用-则表示字符范围。若方括号中的首字符是^时,表示匹配^后的字符以外的任意字符。(在ksh或POSIX shell中可以使用!来代替^。)
{ }
表示依次与括号内的字符进行组合。例如,foo{a,b,c}将变为fooa, foob,
fooc,然后再依次进行匹配。
括号可以嵌套。例如,{foo,bar{foo,bar}}表示将依次与foo, barfoo, barbar进行匹配。
**/
表示通配符*/重复出现0次以上,这将对目录进行再归式地搜索。例如,foo/**/bar表示将依次对foo/bar, foo/*/bar,
foo/*/*/bar ... (此后无限延伸)进行匹配。
ruby 1.7 特性:可使用反斜线对通配符进行转义处理。(请注意,在双引号内的字符串中必须进行2层转义)另外,空白类字符将失去特殊意义(但"\0"依然有效)。若想进行与1.6版本相同的处理时,应使用String#chomp等将多余的空白去掉,或使用gsub(/[\t\n]/,"\0"])进行转换即可。
ruby 1.7 特性:可以为第2可选参数指定一个类似于File.fnmatch中所使用的标识。指定标识后就可改变匹配的运作情况。
Dir.chdir([path])Dir.chdir([path]) {|path| ... } ((<ruby 1.7 特性>))将当前目录改为path。若省略path时,则会调用环境变量HOME或LOGDIR。若它们中包含设定值时,就将当前目录改为它们的值。
若当前目录变更成功就返回0,若失败则引发Errno::EXXX异常。
ruby 1.7 特性:若指定了块的话,则只会在块的执行过程中变更当前目录。这等价于
savedir = Dir.pwd Dir.chdir(newdir) begin ... ensure Dir.chdir(savedir) end
此时,带块方法的返回值就是块的执行结果。
Dir.chroot(path)将根目录改为path。请参考chroot(2)。只有超级用户才能改变根目录。
您将无法还原到原来的根目录。
根目录变更成功时返回0,失败时将引发Errno::EXXX异常。
Dir.delete(path)Dir.rmdir(path)Dir.unlink(path)删除目录。目录必须为空。
若删除成功则返回0,若失败则引发Errno::EXXX异常。
Dir.entries(path)以数组形式返回path目录中所含的文件项名。等同于
def dir_s_entries( path )
Dir.open(path) {|d|
return d.to_a
}
end
Dir.foreach(path) {|file| ...}针对path目录中的元素的迭代器。该方法的运作方式如下。
dir = Dir.open(path)
begin
dir.each {|file|
...
}
ensure
dir.close
end
返回nil。
Dir.getwdDir.pwd返回当前目录的完整路径。
若无法取得当前目录时会引发Errno::EXXX异常(一般不会失败)。
Dir.mkdir(path[, mode])生成新目录path。permission的值要取决于mode(默认值0777)和umask的按位与计算结果(mode & ~umask)(请参考mkdir(2))。
若成功生成新目录就返回0,若失败则引发Errno::EXXX异常。
Dir.new(path)Dir.open(path)Dir.open(path) {|dir| ...}打开并返回一个针对path的目录流。若打开失败则引发Errno::EXXX异常。
open()方法可以带块。若带块调用时,将执行该块。当块的运行结束时,目录将被自动关闭。
ruby 1.7 特性:带块调用该方法的返回值为块的运行结果。在1.6版本中,其返回值恒为nil。
close关闭目录流。此后若再对目录进行操作则会引发IOError异常。
若成功关闭则返回nil。若失败则引发IOError异常。
each {|item| ... }为目录中的各个元素计算块的内容。返回self。
path ((<ruby 1.7 特性>))以字符串形式返回当前打开目录的路径名。
postell以整数形式返回目录流的当前位置。
Dir.open("/tmp") {|d|
d.each {|f|
p d.pos
}
}
pos=(pos)seek(pos)将目录流的读入位置移动到pos。pos必须是使用Dir#tell所得到值。
pos=返回右边,而seek则返回self。
read从目录流中读出并返回下一个元素。若读到最后一个元素则返回nil。
若读取目录失败则引发Errno::EXXX异常。
rewind将目录流的读取位置移到开头。返回self。