Dir
是 Ruby 提供的用于操作文件系统目录的核心类之一。它允许开发者列出、创建、删除、遍历目录中的文件,并与 File
类结合进行高级文件操作。本文将详细介绍 Dir
的主要方法,并提供示例代码。
📌 目录
🔹 Dir
类概述
Dir
类用于管理目录,它提供了多种方法来读取目录内容、更改当前目录、创建/删除目录等。
在 Ruby 中,Dir
是 Enumerable
模块的一部分,因此可以使用 each
、map
等方法来遍历目录内容。
🔹 Dir
的常用方法
📂 读取目录内容
Dir.entries(path)
获取目录 path
下的所有文件和子目录(包含 .
和 ..
)。
puts Dir.entries(".")
# 输出:
# [".", "..", "file1.txt", "script.rb", "subdir"]
Dir.foreach(path) { |file| block }
遍历目录,并对每个文件执行代码块。
Dir.foreach(".") do |file|
puts file
end
Dir.glob(pattern, flags)
返回匹配 pattern
的文件列表(支持通配符)。
puts Dir.glob("*.rb") # 只列出 .rb 文件
puts Dir.glob("**/*.rb") # 递归列出所有子目录的 .rb 文件
puts Dir.glob("{*.rb,*.txt}") # 匹配 .rb 和 .txt 文件
📂 目录操作
Dir.pwd
/ Dir.getwd
获取当前工作目录。
puts Dir.pwd # 例如: /home/user/project
Dir.chdir(path)
切换当前工作目录。
Dir.chdir("/tmp")
puts Dir.pwd # /tmp
Dir.mkdir(path [, mode])
创建目录(可选 mode
参数设置权限)。
Dir.mkdir("new_folder")
Dir.rmdir(path)
删除空目录。
Dir.rmdir("new_folder")
📂 迭代目录
Dir.open(path) { |dir| block }
打开目录并返回 Dir
对象,可用于遍历文件。
Dir.open(".") do |dir|
dir.each { |file| puts file }
end
Dir.new(path)
创建 Dir
对象,不使用代码块时可手动遍历目录。
d = Dir.new(".")
puts d.path # 打印目录路径
d.each { |file| puts file }
📂 删除目录及文件
File.delete(filename)
删除文件,而非目录。
File.delete("file1.txt")
FileUtils.rm_rf(path)
递归删除目录及其内容(需 require 'fileutils'
)。
require 'fileutils'
FileUtils.rm_rf("directory_name")
🔹 Dir
方法的应用示例
📌 递归遍历目录并打印所有文件
def list_files(path)
Dir.glob("#{path}/**/*").each do |file|
puts file
end
end
list_files(".") # 列出当前目录及所有子目录的文件
📌 查找特定类型的文件
Dir.glob("**/*.rb").each do |file|
puts "找到 Ruby 文件: #{file}"
end
📌 删除非空目录
require 'fileutils'
FileUtils.rm_rf("test_folder")
🔹 Dir
与 File
结合使用
通常,我们会结合 File
类来执行更复杂的操作,如获取文件大小、修改时间等。
Dir.glob("*.rb").each do |file|
puts "文件: #{file}, 大小: #{File.size(file)} bytes"
end
🔹 结论
Dir
提供了目录操作的基础方法,包括列出、创建、删除目录。Dir.glob
是最强大的目录搜索方法,支持通配符匹配。- 结合
File
类,可以执行更高级的文件管理操作,如文件属性获取、文件删除等。
Ruby Dir
类提供了强大且直观的 API,使得目录管理变得高效便捷。
发表回复