免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6876 | 回复: 6

Ruby扫盲之文件目录 [复制链接]

论坛徽章:
0
发表于 2011-01-26 16:20 |显示全部楼层
本帖最后由 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)              # 真正的关闭,文件被删除

论坛徽章:
0
发表于 2011-02-01 16:26 |显示全部楼层
好贴!
顶~

论坛徽章:
0
发表于 2011-02-22 19:19 |显示全部楼层
坚决学习。。。

论坛徽章:
0
发表于 2011-11-17 23:17 |显示全部楼层
文件这个话题我也比较感兴趣

论坛徽章:
0
发表于 2012-07-23 15:23 |显示全部楼层
拜读了,写的很详细

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
发表于 2012-07-24 09:40 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2012-08-07 11:34 |显示全部楼层
大家好好讨论一下,真不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP