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


123

我正在开发一个程序,用于从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像你一样使用。这是一个非常强烈的暗示,说明您不了解变量作用域,并且依靠全局变量来“作弊”。它们具有代码气味,并导致痛苦和痛苦。
Tin Man

rip.to_srip.split什么也不做。
Tin Man

Answers:


304

您可以根据需要使用以下功能:

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"

15
请注意,它extn是字符串".mp4" ,甚至是string".*"
Phrogz 2013年

谢谢。在这种情况下的问题是,我不知道那个地方的文件名。我只知道存在两个文件。一个.mp4和一个.m4a。我如何获取该文件名?
Sascha Manns 2013年

@saigkill使用通配符“。*”,如Phrogz所说,如果您不知道/不在意扩展名是什么。
特拉维斯·里德2014年

1
到目前为止,至少有60次我想亲吻写这篇
文章
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.