Ruby获取路径中最后一个子文件夹名称的方法
Ruby获取最后一个子文件夹名的解决方法
你遇到的错误原因很明确:Dir["#{some_base_path}/*/*"]返回的是数组类型的结果(比如你例子里的["/tmp/animals/cats/Fluffy"]),但File.basename和Pathname相关方法都需要传入单个字符串路径,直接把数组丢进去自然会触发no implicit conversion of Array into String类型错误。
下面是两种常用的解决方式:
情况1:结果数组只有一个元素(如你的示例)
直接取出数组的第一个元素再处理:
- 用
File.basename实现:path = Dir["#{some_base_path}/*/*"] target_folder = File.basename(path.first) # 输出结果为"Fluffy" - 用
Pathname实现(需先引入库):require 'pathname' path = Dir["#{some_base_path}/*/*"] target_folder = Pathname.new(path.first).basename.to_s
情况2:结果数组包含多个路径
如果匹配到多个文件夹路径,遍历数组逐个提取:
paths = Dir["#{some_base_path}/*/*"] folder_names = paths.map { |single_path| File.basename(single_path) } # 例如paths为["/tmp/animals/cats/Fluffy", "/tmp/animals/dogs/Buddy"]时,folder_names会得到["Fluffy", "Buddy"]
额外提示
如果需要确保提取的是文件夹(而非文件),可以增加判断逻辑:
path = Dir["#{some_base_path}/*/*"] if path.first && File.directory?(path.first) target_folder = File.basename(path.first) end
内容的提问来源于stack exchange,提问作者soleil
相关产品推荐
相关产品推荐

