Ruby';s目录vs文件vs路径名?

Ruby';s目录vs文件vs路径名?,ruby,Ruby,Ruby的Dir、File和Pathname类之间有什么区别?它们似乎共享一些常用方法,如basename、dirname、glob、和join。什么时候使用一个比另一个更有利 将路径名的功能与目录和文件进行比较时,路径名显得特别独特。最好的资源之一是语言文档,在本例中,它是 Dir正在使用目录,示例包括列出当前工作目录(pwd),创建目录并删除它们 File类似于Dir,但它处理的是处理文件,例如获取和更改权限、创建和删除文件 正如您所说,路径名是独特的,因为它确实包含File的所有功能和Di

Ruby的Dir、File和Pathname类之间有什么区别?它们似乎共享一些常用方法,如
basename
dirname
glob
、和
join
。什么时候使用一个比另一个更有利


将路径名的功能与目录和文件进行比较时,路径名显得特别独特。

最好的资源之一是语言文档,在本例中,它是

Dir正在使用目录,示例包括列出当前工作目录(
pwd
),创建目录并删除它们

File类似于Dir,但它处理的是处理文件,例如获取和更改权限、创建和删除文件

正如您所说,路径名是独特的,因为它确实包含File的所有功能和Dir的一些功能,但如果您阅读文档,它会确切地告诉您它存在的原因。发件人:

此类的价值在于以比标准Ruby提供的更整洁的方式操作文件路径信息。下面的例子说明了这一区别。所有来自File、FileTest的功能,以及一些来自Dir和FileUtils的功能都以一种不足为奇的方式被包括在内。它本质上是所有这些,以及更多东西的一个门面


希望这有助于解释问题。

根据的Ruby文档,它们显然有很多共同之处

Dir
File
之间的原理不同,似乎是
Dir
假定它所处理的对象是目录,而
File
假定文件。在大多数情况下,它们显然可以互换使用,但即使代码工作正常,如果您使用
File
操作目录,使用
Dir
操作文件,阅读代码的人也可能会感到困惑

Pathname
看起来是一种定位文件和目录的多操作系统方法。由于Windows和*nix机器处理文件管理的方式不同,如果希望脚本在任何地方运行,那么以特定于操作系统的方式引用文件或目录可能会很痛苦。从文档中:

Pathname表示在文件系统中定位文件的路径名。路径名取决于操作系统:Unix、Windows等。路径名库使用本地操作系统的路径名。但是,实验上支持非Unix路径名

它不表示文件本身。路径名可以是相对的,也可以是绝对的。直到您尝试引用该文件,该文件是否存在才变得重要

路径名是不可变的。它没有破坏性更新的方法


希望这能有所帮助。

路径名特别有趣,因为在文件和目录类名中使用该字符串时,它可以方便地操纵路径,避免来回操纵字符串。例如:

require 'pathname'

def log_stuff(directory, data)
  path = Pathname.new(directory)
  raise "Directory does not exist" unless path.exist?

  raise "Path given is not a directory" unless path.directory?

  path += "development.log"
  path.open("a") { |io| io.write data }
end
您还可以看到它正在Rails的路径中使用,这也使您能够做一些很酷的事情:

$ rails c
> Rails.root
=> #<Pathname:/home/kibet/code/ruby/sample_app>
> Rails.root.join("config", "database.yml")
=> #<Pathname:/home/kibet/code/ruby/sample_app/config/database.yml>
> _.read
=> "development:\n  adapter: postgresql\n...
$rails c
>Rails.root
=> #
>join(“config”,“database.yml”)
=> #
>读
=>“开发:\n适配器:postgresql\n。。。

File.join(Rails.root,“config”,“database.yml”)相反

在研究这些内容时,您可能还想熟悉FileUtils。我最近一直在使用Pathname,在经历了一段时间的学习之后,我发现它比单独使用File和/或Dir方便得多。Pathname缺少其他功能中的一些功能,但它是ea我想添加它们。