Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby में टेम्पररी फाइल्स मास्टर करना: एक व्यावहारिक गाइड

New और Create में क्या अंतर है?

आप देखेंगे कि Tempfile में फाइलें बनाने के लिए दो मेथड्स हैं।

एक है new, और दूसरा है create।

अंतर क्या है?

डॉक्यूमेंटेशन के अनुसार, new एक Tempfile ऑब्जेक्ट बनाता है (जैसा कि आप उम्मीद करेंगे), लेकिन create आपको एक File ऑब्जेक्ट देता है।

मुझे नहीं लगता कि यह वास्तव में मायने रखता है, क्योंकि Tempfile File को डेलिगेट करता है।

असली अंतर यह है कि create एक ब्लॉक स्वीकार करता है।

लेकिन new नहीं करता।

इसे आज़माएं:

Tempfile.new {} 

आपको यह उपयोगी चेतावनी मिलेगी:

# warning: Tempfile.new doesn't call the given block. 

आप create के साथ एक ब्लॉक का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि ब्लॉक समाप्त होने के बाद आपकी टेम्पररी फाइल डिलीट हो जाए।

यह निम्नलिखित प्रश्न उठाता है...

TempFile कब डिलीट होती है?

आप नियंत्रित कर सकते हैं कि फाइल कब डिलीट होती है, इसे स्वयं एक नियमित फाइल की तरह डिलीट करके (delete मेथड), या create के साथ एक ब्लॉक का उपयोग करके।

ऑटोमैटिक डिलीटिंग तब काम करती है जब:

  • आपका प्रोग्राम समाप्त होता है
  • आपकी फाइल "गार्बेज कलेक्ट" हो जाती है, दूसरे शब्दों में, फाइल को स्पेस खाली करने के लिए एक एल्गोरिदम द्वारा मेमोरी से हटा दिया जाता है

बाद वाला केवल तभी हो सकता है जब आप फाइल का कोई रेफरेंस नहीं रख रहे हों।

जैसे एक वेरिएबल।

मेरा मतलब यहाँ है:

t = Tempfile.new 

जब t स्कोप से बाहर जाता है, तो टेम्पररी फाइल हटाई जा सकती है।

यदि आप लिनक्स का उपयोग कर रहे हैं, तो रियल टाइम में कौन सी फाइलें बनाई और डिलीट की जा रही हैं, इसे देखने के लिए एक बहुत दिलचस्प टूल inotify-tools है।

यह कमांड आज़माएं:

inotifywait /tmp -m --format "%w %e %f %T" --timefmt "%H:%m:%S" 

फिर कुछ Ruby कोड चलाएं जो फाइलें बनाता है।

उदाहरण:

ruby -rtempfile -e "def c; t = Tempfile.new('testing'); end; c; sleep 10" 

आप यह देखेंगे:

/tmp/ CREATE testing20190506-11391-1wqcng0 14:51:48
/tmp/ OPEN testing20190506-11391-1wqcng0 14:51:48
/tmp/ CLOSE_WRITE,CLOSE testing20190506-11391-1wqcng0 14:51:58
/tmp/ DELETE testing20190506-11391-1wqcng0 14:51:58 

आप अपने टेम्प फाइल से वापस क्यों नहीं पढ़ सकते?

यदि आप अपनी टेम्पररी फाइलों में से एक से वापस पढ़ने का प्रयास करते हैं तो आपको एक खाली स्ट्रिंग मिलेगी।

उदाहरण:

Tempfile.create { |f| f << "abc\n"; f.read } # "" 

ऐसा क्यों है?

यह पता चला है कि Files IO ऑब्जेक्ट्स हैं।

IO ऑब्जेक्ट्स में एक पोजीशन पॉइंटर होता है और जब आप एक फाइल में लिखते हैं तो यह पोजीशन आगे बढ़ती है।

इसलिए यदि आप पढ़ना चाहते हैं, तो आपको इस पॉइंटर को रिवाइंड करना होगा।

इस तरह:

Tempfile.create { |f| f << "abc\n"; f.rewind; f.read } # "abc\n" 

आपको अपनी फाइल कंटेंट को फ्लश करने की भी आवश्यकता हो सकती है।

उदाहरण:

temp = Tempfile.new
temp << "1"
temp << "2"
temp.flush 

क्या टेम्पफाइल्स वास्तव में यूनिक हैं?

Tempfile एक यूनिक फाइलनाम बनाता है और परमिशन मोड को 600 पर सेट करता है, जिसका अर्थ है कि केवल इस फाइल को बनाने वाला यूज़र इसे पढ़ सकता है।

लेकिन क्या कभी डुप्लिकेट नाम हो सकता है?

डॉक्यूमेंटेशन यह कहता है:

"Tempfile की फाइलनाम चुनने की विधि थ्रेड-सेफ और इंटर-प्रोसेस-सेफ दोनों है: यह गारंटी देता है कि कोई अन्य थ्रेड या प्रोसेस वही फाइलनाम नहीं चुनेगा।"

और new का विवरण भी कहता है कि यदि यह एक यूनिक फाइलनाम नहीं ढूंढ पाता तो यह एरर उठा सकता है।

यह जानना भी अच्छा है कि आप अपनी फाइलों के लिए एक प्रीफिक्स सेट कर सकते हैं।

इस तरह:

Tempfile.new("banana-").path # "/tmp/banana-20190426-25403-1cm7sjt" 

यह नाम टकराव की संभावना को कम करता है।

बाइनरी मोड में टेम्पफाइल खोलना

यदि आप इमेजेज, संगीत, या प्लेन टेक्स्ट के अलावा किसी भी चीज़ के साथ काम कर रहे हैं तो आप अपने फाइल मोड को बाइनरी पर सेट करना चाह सकते हैं।

बाइनरी फाइल मोड लाइन-एंडिंग कन्वर्जन को रोकेगा।

परिणामस्वरूप, डेटा अधिक "रॉ" होगा और आप बाइनरी फाइल के हिस्सों को तोड़ने से बचेंगे।

बाइनरी मोड डिफ़ॉल्ट रूप से सक्षम नहीं है:

temp = Tempfile.new
temp.binmode? # false 

आप इसे इस तरह सक्षम कर सकते हैं:

temp = Tempfile.new
temp.binmode
temp.binmode? # true 

यह create मेथड के साथ भी काम करता है:

Tempfile.create do |f|
  f.binmode
  f << "bacon\n"
end 

सारांश

आपने Ruby में Tempfile क्लास का उपयोग करके टेम्पररी फाइल्स के बारे में सीखा!

अब अभ्यास करने की आपकी बारी है।

पढ़ने के लिए धन्यवाद 🙂


  1. चरण-दर-चरण गाइड: macOS पर टेक्स्ट फ़ाइलें बनाना चरण-दर-चरण गाइड: macOS पर टेक्स्ट फ़ाइलें बनाना

    क्या आपने हाल ही में Windows ऑपरेटिंग सिस्टम से macOS पर स्विच किया है? यदि हां, तो यह गाइड आपके लिए मददगार साबित होगा। ऐसी बहुत सी विशेषताएं हैं जो Mac को अन्य Windows कंप्यूटर से अलग करती हैं। Mac उपयोग करने में आसान और Windows सिस्टम से अधिक स्थिर होते हैं। हालांकि, एक चीज जो पूरी तरह से अलग होत

  1. विंडोज 10 पर अस्थायी फ़ाइलें हटाकर तेज़ प्रदर्शन के लिए कुशल गाइड विंडोज 10 पर अस्थायी फ़ाइलें हटाकर तेज़ प्रदर्शन के लिए कुशल गाइड

    विंडोज 10 में अस्थायी फ़ाइलें कैसे हटाएं: आप सभी जानते हैं कि पीसी या डेस्कटॉप स्टोरेज डिवाइस के रूप में भी कार्य करते हैं जहां कई फ़ाइलें संग्रहीत होती हैं। कई एप्लिकेशन और प्रोग्राम भी इंस्टॉल होते हैं। ये सभी फ़ाइलें, ऐप्स और अन्य डेटा हार्ड डिस्क पर स्थान घेरते हैं जिससे हार्ड डिस्क मेमोरी अपनी

  1. विंडोज 11 पर PDF बनाएं: चरणबद्ध गाइड विंडोज 11 पर PDF बनाएं: चरणबद्ध गाइड

    विंडोज की सबसे प्रमुख विशेषताओं में से एक है डॉक्यूमेंट को PDF में प्रिंट करने की क्षमता। यह एक बहुत ही उपयोगी टूल है क्योंकि PDF लगभग सभी प्रिंटिंग जरूरतों के लिए पसंदीदा फॉर्मेट बन गया है। PDF फॉर्मेट द्वारा प्रदान की जाने वाली मजबूती और स्वतंत्रता ही प्रमुख कारण है कि पेशेवर भी इसे पसंद करते हैं।