zuerrong 发表于 2011-01-26 16:20

Ruby扫盲之文件目录

本帖最后由 zuerrong 于 2011-01-26 16:35 编辑

写文件,使用"w"标记进行open:

irb(main):001:0> open("a.txt","w") do |f|
irb(main):002:1*   f.puts "hello"
irb(main):003:1>   f.puts "world"
irb(main):004:1> end

读文件,使用"r"标记进行open(或者连"r"也省略):

irb(main):084:0> open("a.txt") do |s|
irb(main):085:1*   s.each do |l| puts l end
irb(main):086:1> end

追加文件,使用"a"标记进行open:

irb(main):011:0> open("a.txt","a") do |f|
irb(main):012:1*   f.puts "nice a girl"
irb(main):013:1> end

open实际是一个Kernel方法,它被File类继承了,所以File.open也可以。

File类自身有很多类方法,用的较多的包括:

File.basename("/path/a.txt")
得到一个文件的基本名。


File.dirname("/path/a.txt")
得到一个文件的目录名。


File.unlink("a.txt")
删除一个文件。


File.rename("a.txt","b.txt")
将文件改名。


File.truncate("a.txt",0)
截断文件,第二个参数是要保留的字节数量。


File.size("a.txt")
文件的大小。

文件测试可以用FileTest这个内置模块,它有一些实用的模块方法:

FileTest::exist?      # 对象是否存在
FileTest::directory?# 是否一个目录
FileTest::file?       # 是否一个文件
FileTest::readable?   # 是否可读
FileTest::writable?   # 是否可写
FileTest::executable? # 是否可执行

不过FileTest的大多数方法,File类自身也包含了。

你可能还对File.stat感兴趣,例如:

File.stat("a.txt").mtime
文件的修改时间。


File.stat("a.txt").mode
文件的许可模式。

改变目录用Dir.chdir方法:
Dir.chdir "/path"

列出一个目录里的所有文件,使用Dir.entries方法:

Dir.entries("/path")
它返回一个包括目录里所有文件和子目录的数组。

或者用Dir.foreach遍历目录:

irb(main):093:0> Dir.foreach("/path") do |d|
irb(main):094:1*   puts d
irb(main):095:1> end

可以更简单:

Dir["/path/*"]
它返回的数组包括/path下的所有文件和子目录,但是不包含隐藏的。
当然还可以Dir["/path/*.txt"],匹配txt结尾的文件等。

创建目录:

Dir.mkdir "aaatest"

上述mkdir再执行一次会出错,因为目录已存在了。
如何实现unix的mkdir -p的效果呢?
使用fileutils,这个类有非常多的实用方法,例如:

require "fileutils"
FileUtils.makedirs("/path/to/dir")

还有remove_dir可以模拟rm -rf效果,强行删除目录:

FileUtils.remove_dir("/path/to/dir")

最后,说明一下如何创建临时文件。
使用Tempfile类:

require "tempfile"
temp = Tempfile.new("stuff")# 创建一个临时文件目标,stuff是随机字串
name = temp.path            # 临时文件路径
temp.puts "zuerrong was here" # 写入内容
temp.close                  # 临时关闭,文件不会删除

# 稍后...
temp.open                     # 再次打开
str = temp.gets               # "zuerrong was here"
temp.close(true)            # 真正的关闭,文件被删除

bugbugbug3 发表于 2011-02-01 16:26

好贴!
顶~

ziyiu123 发表于 2011-02-22 19:19

:emn10: 坚决学习。。。

gr33n 发表于 2011-11-17 23:17

文件这个话题我也比较感兴趣

ganquan1980 发表于 2012-07-23 15:23

拜读了,写的很详细

Sevk 发表于 2012-07-24 09:40

tulip0425 发表于 2012-08-07 11:34

大家好好讨论一下,真不错
页: [1]
查看完整版本: Ruby扫盲之文件目录