本文简要介绍ruby语言中 Pathname类
的用法。
Pathname
代表文件系统上文件或目录的名称,但不代表文件本身。
路径名取决于操作系统:Unix、Windows 等。该库适用于本地操作系统的路径名,但实验性支持非 Unix 路径名。
Pathname
可以是相对的或绝对的。直到您尝试引用该文件时,该文件是否存在才重要。
Pathname
是不可变的。它没有破坏性更新的方法。
此类的目标是以比标准 Ruby 提供的更简洁的方式操作文件路径信息。下面的示例演示了差异。
File
、 FileTest
的所有函数以及 Dir
和 FileUtils
的一些函数都包含在内,这并不奇怪。它本质上是所有这些的门面,甚至更多。
例子
示例 1:使用 Pathname
require 'pathname'
pn = Pathname.new("/usr/bin/ruby")
size = pn.size # 27662
isdir = pn.directory? # false
dir = pn.dirname # Pathname:/usr/bin
base = pn.basename # Pathname:ruby
dir, base = pn.split # [Pathname:/usr/bin, Pathname:ruby]
data = pn.read
pn.open { |f| _ }
pn.each_line { |line| _ }
示例 2:使用标准 Ruby
pn = "/usr/bin/ruby"
size = File.size(pn) # 27662
isdir = File.directory?(pn) # false
dir = File.dirname(pn) # "/usr/bin"
base = File.basename(pn) # "ruby"
dir, base = File.split(pn) # ["/usr/bin", "ruby"]
data = File.read(pn)
File.open(pn) { |f| _ }
File.foreach(pn) { |line| _ }
示例 3:特殊函数
p1 = Pathname.new("/usr/lib") # Pathname:/usr/lib
p2 = p1 + "ruby/1.8" # Pathname:/usr/lib/ruby/1.8
p3 = p1.parent # Pathname:/usr
p4 = p2.relative_path_from(p3) # Pathname:lib/ruby/1.8
pwd = Pathname.pwd # Pathname:/home/gavin
pwd.absolute? # true
p5 = Pathname.new "." # Pathname:.
p5 = p5 + "music/../articles" # Pathname:music/../articles
p5.cleanpath # Pathname:articles
p5.realpath # Pathname:/home/gavin/articles
p5.children # [Pathname:/home/gavin/articles/linux, ...]
函数分解
核心方法
这些方法有效地操纵了 String
,因为这就是路径。除了 mountpoint?
、 children
、 each_child
、 realdirpath
和 realpath
之外,这些都不能访问文件系统。
-
+
File
状态谓词方法
这些方法是 FileTest 的外观:
File
属性和操作方法
这些方法是 File 的外观:
-
chown
(owner, group) -
lchown
(owner, group) -
fnmatch
(模式,*args) -
fnmatch?
(模式,*args) -
open
(*args, █) -
utime
(atime, mtime)
目录方法
这些方法是 Dir 的外观:
-
each_entry
(&块)
IO
这些方法是 IO 的门面:
-
each_line
(*args, █)
实用程序
这些方法是 Find
、 FileUtils
和其他方法的混合:
Method
文档
如上节所示, Pathname
中的大多数方法都是门面。这些方法的文档通常只是说,例如,“请参阅 FileTest.writable?
”,因为无论如何您都应该熟悉原始方法,并且其文档(例如通过 ri
)将包含更多信息。在某些情况下,将进行简要说明。
相关用法
- Ruby Pathname.<=>用法及代码示例
- Ruby Pathname.children用法及代码示例
- Ruby Pathname.descend用法及代码示例
- Ruby Pathname.getwd用法及代码示例
- Ruby Pathname.ascend用法及代码示例
- Ruby Pathname.pwd用法及代码示例
- Ruby Pathname.+用法及代码示例
- Ruby Pathname.sub_ext用法及代码示例
- Ruby Pathname.glob用法及代码示例
- Ruby Pathname.entries用法及代码示例
- Ruby Pathname.join用法及代码示例
- Ruby Pathname.sub用法及代码示例
- Ruby Pathname.each_filename用法及代码示例
- Ruby Pathname.absolute?用法及代码示例
- Ruby Pathname.relative?用法及代码示例
- Ruby Pathname.each_child用法及代码示例
- Ruby Parser类用法及代码示例
- Ruby Parser.use_markup用法及代码示例
- Ruby PackageTask类用法及代码示例
- Ruby PrettyPrint.current_group用法及代码示例
- Ruby Process.groups用法及代码示例
- Ruby Process.wait2用法及代码示例
- Ruby Process.getpgrp用法及代码示例
- Ruby Proc.eql?用法及代码示例
- Ruby PTY.open用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Pathname类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。