浏览 3098 次
锁定老帖子 主题:Rubish File
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-30  
本文的起因在这里。在松底迪的鼓励和指导下,做了一个我认为合理的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一下即可。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics