รับชื่อไฟล์และนามสกุลใน 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เหมือนที่คุณเป็น เป็นคำใบ้ที่ชัดเจนมากที่คุณไม่เข้าใจการกำหนดขอบเขตตัวแปรและอาศัย globals เพื่อ "โกง" เป็นกลิ่นรหัสและนำไปสู่ความทุกข์ยากและความเจ็บปวด
คนดีบุก

นอกจากนี้rip.to_sและrip.splitไม่ต้องทำอะไรเลย
มนุษย์ดีบุก

อาจซ้ำกันได้ของHow to get filename without extension from file path in Ruby
ymoreau

คำตอบ:


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" ".*"
Phrogz

ขอบคุณ ปัญหาในกรณีนี้คือฉันไม่ทราบชื่อไฟล์ในสถานที่นั้น ฉันเพิ่งรู้ว่ามีสองไฟล์ที่มีอยู่ หนึ่ง. mp4 และหนึ่ง. m4a. ฉันจะรับชื่อไฟล์นั้นได้อย่างไร
Sascha Manns

@saigkill ใช้ ". *" ตัวแทนตามที่ Phrogz กล่าวหากคุณไม่ทราบ / สนใจว่าส่วนขยายคืออะไร
Travis Reeder

1
จนถึงตอนนี้มีอย่างน้อย 60 ครั้งที่ฉันอยากจูบคนที่เขียนข้อความนี้
bbozo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.