如何从Ruby中的文件路径中获取文件名?

例如,如果我有一个路径“C:\projects\blah.dll”,我只想要“blah”。

在Ruby中有LastIndexOf方法吗?


当前回答

尝试File.basename

返回file_name中给出的文件名的最后一个组件,必须使用正斜杠(' ' / ")来组成,而不管本地文件系统上使用的分隔符是什么。如果suffix出现在file_name的末尾,它将被删除。 File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename(“/ home / gumby /工作/ ruby。Rb ", ".rb") #=> "ruby"

在你的情况下:

File.basename("C:\\projects\\blah.dll", ".dll")  #=> "blah"

其他回答

require 'pathname'

Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>

我不是Windows用户很长时间了,但是Pathname rdoc说它在Windows上没有目录名称分隔符的问题。

如果扩展名不知道(它需要/分隔符):

irb(main):024:0> f = 'C:\foobar\blah.txt'.gsub("\\","/")
=> "C:/foobar/blah.txt"
irb(main):027:0> File.basename(f,File.extname(f))
=> "blah"

你可以获得当前脚本的目录路径:

File.dirname __FILE__

尝试File.basename

返回file_name中给出的文件名的最后一个组件,必须使用正斜杠(' ' / ")来组成,而不管本地文件系统上使用的分隔符是什么。如果suffix出现在file_name的末尾,它将被删除。 File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename(“/ home / gumby /工作/ ruby。Rb ", ".rb") #=> "ruby"

在你的情况下:

File.basename("C:\\projects\\blah.dll", ".dll")  #=> "blah"

乔纳森·洛诺夫斯基(Jonathan Lonowski)回答得很完美,但这里没有一个答案提到。可以直接使用` . extname而不是File::extname。*'获取文件名。

File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah"

但是,如果您想要获得任何特定扩展文件的基本文件名,那么您需要使用file::extname,否则不需要。