রুবিতে ফাইলের নাম এবং এক্সটেনশন পান


123

আমি ইউটিউব থেকে একটি ভিডিও ডাউনলোড করতে, এটিকে এমপি 3 এ রূপান্তর করতে এবং ফাইলগুলির জন্য একটি ডিরেক্টরি কাঠামো তৈরি করতে একটি প্রোগ্রামে কাজ করছি।

আমার কোডটি হ'ল:

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আপনার মতো ব্যবহার করবেন না । এগুলি একটি শক্তিশালী ইঙ্গিত যা আপনি ভেরিয়েবল স্কোপিং বুঝতে পারেন না এবং "প্রতারণা" করার জন্য গ্লোবালগুলির উপর নির্ভর করছেন। এগুলি কোড-গন্ধ এবং দুর্দশা এবং বেদনার দিকে পরিচালিত করে।
টিন ম্যান

এছাড়াও rip.to_sএবং rip.splitকিছুই না।
টিন ম্যান

উত্তর:


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" বা এমনকি স্ট্রিং".*"
ফ্রোগজ

ধন্যবাদ। এই ক্ষেত্রে সমস্যাটি হ'ল আমি সেই জায়গার ফাইল নামটি জানি না। আমি কেবল জানি যে দুটি ফাইল বিদ্যমান। একটি। এমপি 4 এবং একটি। এম 4 এ। আমি কীভাবে এই ফাইলের নামগুলি পেতে পারি?
সাসা ম্যানস

@ এসইগকিল "। *", ওয়াইল্ডকার্ড হিসাবে ব্যবহার করুন, যেমন আপনি জানেন না / যত্ন না রাখলে এক্সটেনশনটি কী Ph
ট্র্যাভিস রেডার

1
কমপক্ষে
60০
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.