在Ruby中获取文件名和扩展名

169

我正在编写一个程序,用于从YouTube下载视频,将其转换为MP3格式并创建文件目录结构。

我的代码如下:

FileUtils.cd("#{$musicdir}/#{$folder}") do
  YoutubeDlhelperLibs::Downloader.get($url)
  if File.exists?('*.mp4')
    puts 'Remove unneeded tempfile'
    Dir['*.mp4'].each do |waste|
      File.delete(waste)
    end
  else
    puts 'Temporary file already deleted'
  end

  Dir['*.m4a'].each do |rip|
    rip.to_s
    rip.split
    puts 'Inside the function'
    puts rip
  end

end

第一个进入已经创建的音乐文件夹,执行get。然后我有两个文件在目录中:“xyz.mp4”和“xyz.m4a”。

我想获取没有扩展名的文件名,这样我就可以单独处理这两个文件。

我正在使用数组,但是对于仅匹配一个元素的数组听起来很疯狂。

是否有其他建议?


5
不要像你现在这样使用$globals。它们非常明显地表明你不理解变量作用域,并且依赖全局变量进行“欺骗”。这是一种代码异味,并会导致痛苦和烦恼。 - the Tin Man
1
同时,rip.to_srip.split没有任何作用。 - the Tin Man
1个回答

413

您可以使用以下功能来实现您的目的:

path = "/path/to/xyz.mp4"

File.basename(path)         # => "xyz.mp4"
File.extname(path)          # => ".mp4"
File.basename(path, ".mp4") # => "xyz"
File.basename(path, ".*")   # => "xyz"
File.dirname(path)          # => "/path/to"

17
请注意,extn 是字符串 ".mp4" 甚至是字符串 ".*" - Phrogz
1
谢谢。在这种情况下的问题是,我不知道那个位置上的文件名。我只知道有两个文件存在。一个是.mp4和一个是.m4a。我如何获取这些文件名? - Sascha Manns
1
@saigkill 使用“.*”通配符,就像Phrogz所说的那样,如果您不知道/不关心扩展名是什么。 - Travis Reeder
4
到目前为止,我至少想亲吻写下这段代码的人60次。 - bbozo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接