Ruby 目录IO操作(Dir)

特殊符号————点 允许使用类名或者模块名后,使用点(.ways)再加上方法名,来调用类或模块中的方法

特殊符号————双冒号,:: 是一元运算符 允许使用类名或模块名称后,加两个冒号 :: 和常量名,来引用类或模块中的常量。(非常重要) 在类或模块内定义常量、实例方法和类方法,可以从类或模块外的任何地方进行访问。

请记住: 在 Ruby 中,类和方法也可以被当作常量 ==》 这么来看:双冒号后面可加方法,这时双冒号可用被点代替

如果 :: 前的表达式为类名或模块名,则返回该类或模块内对应的常量值(或者方法); 如果 :: 前未没有前缀表达式,则返回主Object类中对应的常量值。

Ruby中,目录是一种内嵌类,通过类实例化为对象,可以调用对象方法,它不需要require; Ruby 提供了处理文件和目录的方式。File 类用于处理文件,Dir 类用于处理目录。使用methods获取方法 Dir 类表示一个连接到普通目录的 stdio 对象。open 为普通文件返回该类的一个实例。

核心:获取在线帮助 Dir.methods

=> [:exists?, :empty?, :exist?, :home, :open, :new, :public_send, :send, :display, :hash, :class,  :clone, :dup, 
:mkdir, :chdir, :getwd, :pwd, :chroot, :rmdir, :unlink, :delete, :entries, :foreach, :each_child, :children, ]

Ruby Dir 类和方法

Dir 是一个表示用于给出操作系统中目录中的文件名的目录流。 Dir 类也拥有与目录相关的操作,比如通配符文件名匹配、改变工作目录等。

一、目录内容操作

1、创建目录对象 == Dir::new()

使用:dins = Dir.new( path),可以创建新的目录对象,返回目录句柄

作用:初始化一个目录对象,使用目录句柄可用于read和write。

2、打开目录对象 == Dir::open()

使用:dins = Dir.open( path) or Dir.open( path) {| dir| ...}

作用:返回 path 的新目录对象。如果 open 给出一个块,则新目录对象会传到该块,块会在终止前关闭目录对象

3、读取目录对象 == Dir::read()

使用:context = Dir.read() 方法,这个方法类似Linux readdir调用,每次返回一个目录内容

作用:for i in Dir.read() ; puts i end ;

4、返回目录读取指针 == Dir::tell()

使用:conum = dins.tell() 方法,调用read后返回一个目录内容,指针加一

作用:读取目录的当前指针,read执行时逐个加一

5、设置目录读取指针 == Dir::seek()

使用:conum = dins.seek(num) 方法,调用seek方法并传递数值,以设置目录读取的指针为位置

作用:设置目录到指定指针位置

二、目录属性操作

1、创建目录 == Dir::mkdir()

使用:Dir.mkdir( path,mode) ,可用于直接创建目录

注意:掩码 755 设置所有者(owner)、所属组(group)、在 Win32 的平台上会被忽略 每个人(world [anyone])的权限为 rwxr-xr-x,其中 r = read 读取,w = write 写入,x = execute 执行

2、删除目录 == Dir::delete() / Dir::unlink()

使用:Dir.delete( path),可用于直接删除目录

注意:Dir.unlink 和 Dir.rmdir 执行同样的功能,但delete执行目录必须是空的。比如Dir.delete("testdir")

3、程序改变目录 == Dir::chdir()

使用:Dir.chdir( path),改变ruby程序的执行目录

作用:返回 0 值,表示目录修改成功

4、程序改变根目录 == Dir::chroot()

使用:Dir.chroot( path),改变ruby程序的根目录,目前Docker使用此系统调用实现文件系统虚拟化

注意:这个指令必须由最高权限root执行才会生效

5、获取当前目录 == Dir::pwd()

使用:ret = Dir.pwd(),返回程序当前的执行路径

作用:获取当前的程序目录

6、获取指定目录内的内容 == Dir.entries()

使用: Dir.entries("/usr/bin").join(' '),常用来获取指定目录内的文件或目录列表:

作用:返回一个数组,包含指定目录内的所有项。Dir.foreach 提供了相同的功能:

7、获取指定目录内的内容 == Dir::foreach()

使用:Dir.foreach( path) {| f| ...}, 为 path 指定的目录中的每个文件执行一次块

比如:Dir.foreach("/usr/bin") do |entry| puts entry end
这段代码是,获取目录列表的一个更简洁的方式是通过使用 Dir 的类数组的方法:

8、创建文件 & 临时目录

临时文件是那些在程序执行过程中被简单地创建,但不会永久性存储的信息。

Dir.tmpdir 提供了当前系统上临时目录的路径,但是该方法默认情况下是不可用的。 为了让 Dir.tmpdir 可用,使用必需的 'tmpdir' 是必要的 您可以把 Dir.tmpdir 和 File.join 一起使用,来创建一个独立于平台的临时文件:

require 'tmpdir'
tempfilename = File.join(Dir.tmpdir, "tingtong")
tempfile = File.new(tempfilename, "w")
tempfile.puts "This is a temporary file"
tempfile.close
File.delete(tempfilename)

这段代码创建了一个临时文件,并向其中写入数据,然后删除文件。 Ruby 的标准库也包含了一个名为 Tempfile 的库,该库可用于创建临时文件:

9、Dir[pat] Dir::glob( pat) 返回一个数组,包含与指定的通配符模式 pat 匹配的文件名: 【* - 匹配包含 null 字符串的任意字符串 ** - 递归地匹配任意字符串 ? - 匹配任意单个字符 [...] - 匹配封闭字符中的任意一个 {a,b...} - 匹配字符串中的任意一个 Dir["foo.*"] # 匹配 "foo.c"、 "foo.rb" 等等 Dir["foo.?"] # 匹配 "foo.c"、 "foo.h" 等等】