রুবিতে কোনও প্রদত্ত ডিরেক্টরি উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন


163

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যা একটি নির্দিষ্ট ডিরেক্টরি উপস্থিত রয়েছে কিনা তার ভিত্তিতে একটি সাবভার্সন URL স্বয়ংক্রিয়ভাবে চেক আউট করে বা আপডেট করে।

কিছু কারণে, আমার কোডটি কাজ করছে না এবং এটি মিথ্যা হলেও সর্বদা সত্য ফিরে আসে :

def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end

আমি কি ভুল করছি?

উত্তর:


287

যদি এটা গুরুত্বপূর্ণ কিনা আপনি যে ফাইলটি খুঁজছেন একটি হল ডিরেক্টরি এবং শুধুমাত্র একটি ফাইল, আপনি ব্যবহার করতে পারে File.directory?বা Dir.exist?। ফাইলটি উপস্থিত থাকলে এবং এটি ডিরেক্টরি হয় তবেই এটি সত্য হবে।

একদিকে যেমন, পদ্ধতিটি লেখার আরও একটি মূ .় উপায় হ'ল রুবি স্বয়ংক্রিয়ভাবে পদ্ধতির অভ্যন্তরে শেষ প্রকাশের ফলাফলটি ফিরে আসে। সুতরাং, আপনি এটি লিখতে পারে:

def directory_exists?(directory)
  File.directory?(directory)
end

মনে রাখবেন যে বর্তমান পদ্ধতিতে কোনও পদ্ধতি ব্যবহার করা প্রয়োজন নয়।


139
কেন এটি অন্য পদ্ধতির ভিতরে রেখে বিরক্ত করবেন? শুধু এটি সরাসরি কল!
রায়ান বিগ

11
@ রাদার আমি বুঝতে পেরেছিলাম যে স্ট্রিপড ডাউন পদ্ধতিটি সম্ভবত প্রশ্নের প্রয়োজনে সহজতর করা হয়েছিল এবং আসল পদ্ধতিতে কিছু অতিরিক্ত যুক্তি থাকতে পারে। যদি অন্য কোনও যুক্তি পদ্ধতিতে না যাওয়ার প্রয়োজন হয় তবে আমি সম্মত। সমস্ত উপায়ে, কেবল ডিরেক্টরি চালান? সরাসরি।
এমিলি

4
এর Dir.exists?চেয়ে ক্লিনার হবে না File.directory??
ইয়ো লুডকে

3
Dir.exists?Dir.exist
অবচয়

4
@ বার্নিংপনি আমার খারাপ, এটিDir.exist?
fkoessler

42

আপনিও এর Dir::exist?মতো ব্যবহার করতে পারেন:

Dir.exist?('Directory Name')

রিটার্নস trueযদি 'ডিরেক্টরির নাম' একটি ডিরেক্টরি হয় falseঅন্যথায়। 1


2
এটির জন্য রুবি> 1.9 বা তার বেশি প্রয়োজন হবে বলে মনে হয় 1.8 এ এটি ফিরে আসে undefined method `exists?' for Dir:Class (NoMethodError)। এছাড়াও, বহুবচন ফর্ম এখন অবচয়, .exist?পরিবর্তে ব্যবহার করুন।
জোসিপ রডিন

40

অন্য সমস্ত উত্তর সঠিক, তবে আপনি যদি কোনও ব্যবহারকারীর হোম ডিরেক্টরিতে ডিরেক্টরি পরীক্ষা করার চেষ্টা করছেন তবে আপনার সমস্যা হতে পারে। পরীক্ষা করার আগে আপনি আপেক্ষিক পথটি প্রসারিত করুন তা নিশ্চিত করুন:

File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true

18
File.exist?("directory")

Dir[]একটি অ্যারে প্রদান করে, তাই এটি কখনই হবে না nil। আপনি যদি এটি নিজের উপায়ে করতে চান তবে আপনি করতে পারেন

Dir["directory"].empty?

trueএটি না পাওয়া গেলে যা ফিরে আসবে ।


7

আপনি ব্যবহার করতে পারেন Kernel#test:

test ?d, 'some directory'

এটি https://ss64.com/bash/test.html থেকে এটির উত্স পেয়েছে আপনি লক্ষ্য করবেন যে কোনও ডিরেক্টরি বিদ্যমান থাকলে বাশের testএই পতাকাটি -dপরীক্ষা করার জন্য রয়েছে -d file True if file is a Directory. [[ -d demofile ]]


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