में रिकर्सिव फ़ाइल सूची मैं रुबी (जावा देव होने के लिए) और एक विधि (ओह, माफ करना, एक फ़ंक्शन) को लागू करने की कोशिश कर रहा हूं जो उपनिर्देशिका में सभी फ़ाइलों को पुनः प्राप्त करने और उपज करने के लिए प्रयास करेगी।रुबी
मैं के रूप में यह क्रियान्वित किया है:
def file_list_recurse(dir)
Dir.foreach(dir) do |f|
next if f == '.' or f == '..'
f = dir + '/' + f
if File.directory? f
file_list_recurse(File.absolute_path f) { |x| yield x }
else
file = File.new(f)
yield file
end
end
end
मेरे प्रश्न हैं:
- करता File.new वास्तव में एक फ़ाइल को खोलने? जावा में नई फ़ाइल ("xxx") नहीं है ... अगर मुझे कुछ संरचना उत्पन्न करने की आवश्यकता है जो मैं रूबी में क्या होगा, फ़ाइल फ़ाइल (सीटाइम, आकार इत्यादि) से पूछताछ कर सकता हूं?
- {| x | उपज x} मेरे लिए थोड़ा अजीब लग रहा है, क्या यह ठीक है कि इस तरह के पुनरावर्ती कार्यों से उपज है, या इससे बचने का कोई तरीका है?
- '।' की जांच करने से बचने का कोई तरीका है और प्रत्येक पुनरावृत्ति पर '..'?
- क्या इसे लागू करने का कोई बेहतर तरीका है?
धन्यवाद
पुनश्च: मेरी विधि का नमूना उपयोग कुछ इस तरह है:
curr_file = nil
file_list_recurse('.') do |file|
curr_file = file if curr_file == nil or curr_file.ctime > file.ctime
end
puts curr_file.to_path + ' ' + curr_file.ctime.to_s
(है कि आप पेड़ से सबसे पुरानी फ़ाइल मिलेगा)
= =========
तो, @buruza के लिए धन्यवाद इमोन मैंने महान Dir.glob फ़ंक्शन को पाया जो मुझे कोड की कुछ पंक्तियों को बचाता है। इसके अलावा, @Casper करने के लिए धन्यवाद मैं बाहर File.stat विधि है, जो दो बार File.new
साथ तुलना में तेजी से मेरी समारोह रन बना अंत में पाया मेरे कोड कुछ इस तरह लग रही है:
i=0
curr_file = nil
Dir.glob('**/*', File::FNM_DOTMATCH) do |f|
file = File.stat(f)
next unless file.file?
i += 1
curr_file = [f, file] if curr_file == nil or curr_file[1].ctime > file.ctime
end
puts curr_file[0] + ' ' + curr_file[1].ctime.to_s
puts "total files #{i}"
=====
डिफ़ॉल्ट Dir.glob करके फ़ाइल नाम एक बिंदु (* nix में 'छुपा' माना जाता है) के साथ शुरू करने पर ध्यान नहीं देता, तो यह दूसरा तर्क फ़ाइल जोड़ने के लिए बहुत महत्वपूर्ण है :: FNM_DOTMATCH
कि बहुत अच्छा है!लेकिन यह स्ट्रिंग ऑब्जेक्ट्स का ऐरे उत्पन्न करता है। जो मैं खोज रहा हूं वह वह कार्य है जो फाइल-जैसी संरचना उत्पन्न करेगा ताकि मैं उस पर आधारित अपनी गणना कर सकूं। सबसे बड़ी फाइल ढूँढना, सबसे पुराना सीटा आदि –
Dir ['।'] एक ब्लॉक स्वीकार नहीं करता है। लेकिन Dir.glob करता है! यह प्रश्न # 1 –