Rubish File

本文的起因在 这里。在松底迪的鼓励和指导下,做了一个我认为合理的File实现,规则如下:

1. 追加String的to_file方法
ruby 代码
  1. "c:/temp/test.txt".to_file.exist?  

2. 区分File对象的new和open,只有当需要对File的内容进行操作时,才open。

3. 推荐的new操作只有一个初始化参数即路径名,open方法只有mode及其它参数,一次典型的调用如下:
ruby 代码
  1. "name".to_file.open("mode"do |file|  
  2.      xxxxxxx  
  3. end  
但为了照顾部分人的喜好,继承ruby胸怀宽广的传统,仍保留带open参数的new方式,如:
ruby 代码
  1. File.new("name""mode")  
将按mode打开文件

4. 如果open调用带有block,则内部保证在block执行完毕后close文件,否则需要显示close.
ruby 代码
  1. file = File.new("c:\\temp\\test.txt")  
  2. puts file.open.readlines  
  3. file.close  
ruby 代码
  1. ”somefile.txt“.to_file.open { |file|  
  2.   puts file.readlines  
  3. }  


4. 维持原File类的静态open方法的语义,典型调用如下:
ruby 代码
  1. File.open("name""mode") { |f|  
  2.       f.xxx  
  3. }  

5. 不需要了解文件内容,如信息查询等操作,全部作为instance method,包括:
ruby 代码
  1. :directory?, :file?, :readable?, :owned?, :pipe?, :mtime?, :extname:ftype,   
  2. :executable_real?, :executable?, :dirname:exist?, :basename:blockdev?,   
  3. :chardev?, :atime:chmod:chown:ctime:delete:grpowned?, :lchmod:stat,   
  4. :readable_real?, :readlink:rename:setgid:setuid:size:size?, :socket?,   
  5. :split:sticky:symlink?, :truncate:writable?, :writable_real:zero?  
详情请参考ruby的缺省File实现的文档

6. 对于目录,追加each遍历方法,并去掉恶心的“.", ".."两个东西,每一个遍历项是一个新的File对象,典型调用如下:
ruby 代码
  1. File.new("/dir").each { |child|  
  2.     if child.directory?  
  3.        ......  
  4.     else   
  5.        .....  
  6.     end  
  7. }      

7. 追加文件实例的create方法
ruby 代码
  1. "/somedir/somefile".to_file.create  
追加opened?方法,查询文件是否已被打开
维持path语义,返回构造时提供的路径名,类型为字符串,不做normalize

8. 其它功能均维持File的原状。

代码见附件,使用时在自己的脚本前require一下即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值