Ruby语言入门(13)- 内部类 -Dir

上一篇 / 下一篇  2013-02-04 13:25:26 / 个人分类:语言

Dir类为实现目录流操作而设置的类,它可以依次返回目录中的元素。

Dir[pattern]
Dir.glob(pattern)
Dir.glob(pattern) {|file| ...}
Dir.glob(pattern[, flags]) 
Dir.glob(pattern[, flags]) {|file| ...} 
以字符串数组的形式返回通配符匹配结果。若指定了块的话,将以匹配成功的文件为参数,依次计算该块,然后返回nil。可以一次指定多个pattern,此时需要使用空白(space,tab,换行)或"\0"将它们分割开来。

可用的通配符(pattern)如下。
  • *匹配任何字符串,包括空字符串。
  • ?匹配任何一个字符。
  • [ ]只要匹配方括号中任何一个字符即可。若使用-则表示字符范围。若方括号中的首字符是^时,表示匹配^后的字符以外的任意字符。
  • { }表示依次与括号内的字符进行组合。例如,foo{a,b,c}将变为fooa, foob, fooc,然后再依次进行匹配。括号可以嵌套。例如,{foo,bar{foo,bar}}表示将依次与foo, barfoo, barbar进行匹配。
  • **/表示通配符*/重复出现0次以上,这将对目录进行再归式地搜索。例如,foo/**/bar表示将依次对foo/bar, foo/*/bar, foo/*/*/bar ... (此后无限延伸)进行匹配。
  • 可使用反斜线对通配符进行转义处理。
  • 可以为第2可选参数指定一个类似于File.fnmatch中所使用的标识。
Dir.getwd
Dir.pwd
返回当前目录的完整路径。

Dir.chdir([path])
Dir.chdir([path]) {|path| ... } 
将当前目录改为path。若省略path时,则会调用环境变量HOME或LOGDIR。若它们中包含设定值时,就将当前目录改为它们的值。若当前目录变更成功就返回0,若失败则引发Errno::EXXX异常。若指定了块的话,则只会在块的执行过程中变更当前目录。

Dir.pwd
=>"c:/"
Dir.chdir("c:\\Sites")
=>0
Dir.pwd
=>"c:/Sites"


Dir.chroot(path)
将根目录改为path。只有超级用户才能改变根目录。您将无法还原到原来的根目录。根目录变更成功时返回0,失败时将引发Errno::EXXX异常。

Dir.mkdir(path[, mode])
生成新目录path.若成功生成新目录就返回0,若失败则引发Errno::EXXX异常。

Dir.mkdir("c:\\test")
=>0

Dir.delete(path)
Dir.rmdir(path)
Dir.unlink(path)
删除目录。目录必须为空。若删除成功则返回0,若失败则引发Errno::EXXX异常。

Dir.delete("c:\\test")
=>0

Dir.entries(path)
以数组形式返回path目录中所含的文件项名

Dir.entries("c:\\Sites")
=>[".", "..", "chromedriver.log", "todo"]

Dir.foreach(path) {|file| ...}
针对path目录中的元素的迭代器。

Dir.new(path)
Dir.open(path)
Dir.open(path) {|dir| ...}
打开并返回一个针对path的目录流。若打开失败则引发Errno::EXXX异常。open()方法可以带块。若带块调用时,将执行该块。当块的运行结束时,目录将被自动关闭。

a=Dir.open("c:\\Sites")
=> #<Dir:c:\Sites>

close
关闭目录流。此后若再对目录进行操作则会引发IOError异常。若成功关闭则返回nil。若失败则引发IOError异常。

a.close
=>nil
a.tell
IOError: closed directory

each {|item| ... }
为目录中的各个元素计算块的内容。返回self。

a.each {|item| puts item}
.
..
chromedriver.log
todo
=> #<Dir:c:\Sites>

path
以字符串形式返回当前打开目录的路径名。

a.path
=>"c:\\Sites"

pos
tell
以整数形式返回目录流的当前位置。

a.pos
=>4

pos=(pos)
seek(pos)
将目录流的读入位置移动到pos。pos必须是使用Dir#tell所得到值。pos=返回右边,而seek则返回self。

a.seek(2)
=> #<Dir:c:\Sites>
a.tell
=> 2

read
从目录流中读出并返回下一个元素。若读到最后一个元素则返回nil。若读取目录失败则引发Errno::EXXX异常。

a.read
=>"chromedriver.log"

rewind
将目录流的读取位置移到开头。返回self。

a.rewind
=> #<Dir:c:\Sites>
a.tell
=>0

TAG:

 

评分:0

我来说两句

日历

« 2024-03-23  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 148604
  • 日志数: 185
  • 文件数: 6
  • 建立时间: 2007-08-06
  • 更新时间: 2015-01-06

RSS订阅

Open Toolbar