如何从Ruby中的文件路径中获取文件名?
例如,如果我有一个路径“C:\projects\blah.dll”,我只想要“blah”。
在Ruby中有LastIndexOf方法吗?
如何从Ruby中的文件路径中获取文件名?
例如,如果我有一个路径“C:\projects\blah.dll”,我只想要“blah”。
在Ruby中有LastIndexOf方法吗?
当前回答
如果扩展名不知道(它需要/分隔符):
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"
其他回答
Jonathon的答案更好,但要让您知道somelist[-1]是可用的LastIndexOf表示法之一。
krusty。我提到了一些人。最后显然也是。
irb(main):003:0* f = 'C:\\path\\file.txt'
irb(main):007:0> f.split('\\')
=> ["C:", "path", "file.txt"]
irb(main):008:0> f.split('\\')[-1]
=> "file.txt"
我个人更喜欢使用Pathname和。*
path = Pathname.new('/home/motine/myname.dll')
path.basename('.*') # => "myname"
basename实际上返回一个Pathname实例。如果你想强制一个字符串,你可以对它调用to_s。
注意双引号字符串转义。
'C:\projects\blah.dll'.split('\\').last
尝试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"
如果扩展名不知道(它需要/分隔符):
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"