एक अस्थायी स्थान पर लिखने का क्या लाभ है, और फिर इसे इच्छित स्थान पर कॉपी करना है?


47

मैं एक एप्लिकेशन लिख रहा हूं जो उपग्रह चित्रों के साथ काम करता है, और मेरे बॉस ने मुझे कुछ व्यावसायिक अनुप्रयोगों को देखने के लिए कहा, और देखें कि वे कैसे व्यवहार करते हैं। मुझे एक अजीब व्यवहार मिला और फिर जैसा मैं देख रहा था, मैंने इसे अन्य मानक अनुप्रयोगों में भी पाया।

ये प्रोग्राम पहले अस्थायी फ़ोल्डर में लिखते हैं, और फिर इसे इच्छित गंतव्य पर कॉपी करते हैं।

उदाहरण: 7zip पहले अस्थायी फ़ोल्डर में निकालता है, और फिर निकाले गए डेटा को उस स्थान पर कॉपी करता है जिसे आपने डेटा को निकालने के लिए कहा था।

मैं इस दृष्टिकोण के साथ कई समस्याएं देखता हूं:

  1. अस्थायी फ़ोल्डर में पर्याप्त स्थान नहीं हो सकता है, जबकि इच्छित स्थान में इतना स्थान हो सकता है।

  2. यदि यह एक बड़ी फाइल है, तो यह कॉपी ऑपरेशन के लिए एक गैर-नगण्य राशि ले सकता है।

मैंने इसके बारे में बहुत सोचा, लेकिन मैं ऐसा करने के लिए एक भी सकारात्मक बिंदु नहीं देख सका। क्या मुझे कुछ याद आ रहा है, या ऐसा करने का कोई वास्तविक लाभ है?


यदि एप्लिकेशन को इसकी आवश्यकता है, तो इसे करें। अन्यथा, वही करें जो समझ में आता है। आपका मस्तिष्क आपको बता रहा है कि इस मामले में इसकी आवश्यकता नहीं है। मैं कम से कम काम संभव करने के शिविर में हूँ जैसा कि आप मेरे उत्तर द्वारा बता सकते हैं इसलिए मैं ऐप के लिए कम से कम काम करने की सलाह देता हूं।
जेसन सेब्रिंग

1
क्या आपको यकीन है कि यह फ़ाइल की "नकल" कर रहा है और इसे "हिल" नहीं रहा है? बड़ा अंतर।
फ्रैंक

से blogs.rsa.com/... , malwares के लिए, लाभ यह है 1) गारंटी writability बचा जाता है "लाल त्रुटि" का पता लगाने से पहले ही पूरी तरह से उपयोगकर्ता के कंप्यूटर पर वायरस डाउनलोड किया है 2) अस्थायी डिस्क आमतौर पर तेजी से कर रहे हैं (रैमडिस्क) के लिए समय को कम करने वायरस का पता लगाना अभी भी
डाउनलोडिंग

3) जब आप अभी भी डाउनलोड कर रहे हैं या चल रहे हैं, अगर कोई एंटीवायरस आप में धमाका करता है (खुद को बिना जाने, कभी-कभी) और अपनी हड्डियों को चारों ओर पड़ा रहता है, तो आप अभी भी एक x% संभावना पर भरोसा कर सकते हैं कि ओएस या उपयोगकर्ता गलती से आपको हटाने में मदद करेंगे आपकी मृत हड्डियां, जबकि वे TEMP फ़ोल्डर से थोक समाशोधन सामान हैं, यह पता लगाने की संभावना को कम करने में मदद करता है।
पचेरियर

जवाबों:


95

कुछ कारण जो मैं सोच सकता हूं:

  • अधिकांश प्लेटफार्मों पर, फ़ाइल चालें परमाणु होती हैं, लेकिन फ़ाइल राइट्स नहीं हैं (विशेषकर यदि आप एक बार में सभी डेटा नहीं लिख सकते हैं)। इसलिए यदि आपके पास विशिष्ट निर्माता / उपभोक्ता पैटर्न है (एक प्रक्रिया फ़ाइलों का उत्पादन करती है, तो दूसरी एक निर्देशिका देखती है और वह सब कुछ पाती है), जो पहले एक अस्थायी फ़ोल्डर में लिखती है और उसके बाद ही वास्तविक स्थान पर जाती है, इसका मतलब है कि उपभोक्ता कभी नहीं देख सकता है अधूरी फाइल।
  • यदि फ़ाइल लिखने वाली प्रक्रिया आधे रास्ते से गुजर जाती है, तो आपके पास अपनी डिस्क पर एक टूटी हुई फ़ाइल है। यदि यह एक वास्तविक स्थान पर है, तो आपको इसे स्वयं साफ करने का ध्यान रखना होगा, लेकिन यदि यह अस्थायी स्थान पर है, तो ओएस इसका ध्यान रखेगा।
  • यदि फ़ाइल तब बनती है जब बैकअप कार्य चल रहा होता है, तो कार्य अपूर्ण फ़ाइल उठा सकता है; अस्थायी निर्देशिकाओं को आम तौर पर बैकअप से बाहर रखा जाता है, इसलिए फ़ाइल को अंतिम गंतव्य पर ले जाने के बाद ही शामिल किया जाएगा।
  • अस्थायी निर्देशिका एक तेज़-लेकिन-वाष्पशील फाइलसिस्टम (उदाहरण के लिए एक रैमडिस्क) पर हो सकती है, जो समानांतर में एक ही फ़ाइल के कई हिस्सा डाउनलोड करने, या फ़ाइल के इन-प्लेस प्रसंस्करण जैसी चीज़ों के लिए फायदेमंद हो सकती है। इसके अलावा, अस्थायी निर्देशिकाएं कम पढ़ी, लिखी और हटाई जाने वाली निर्देशिकाओं की तुलना में अधिक विखंडन का कारण बनती हैं, और अस्थायी निर्देशिका को अलग विभाजन पर रखने से अन्य विभाजनों के विखंडन को कम रखने में मदद मिल सकती है।

टीएल; डीआर - यह ज्यादातर परमाणुता को उबालता है, अर्थात, आप इसे बनाना चाहते हैं ताकि (अंतिम स्थान पर) फ़ाइल या तो पूरी हो या किसी भी समय बिल्कुल नहीं।


12
यदि अस्थायी निर्देशिका अलग विभाजन पर है, तो आप परमाणु खो देते हैं।
येलफेल्डम

16
कुछ कार्यक्रम इच्छित निर्देशिका में / कॉपी निकालेंगे, लेकिन वे एक अस्थायी फ़ाइल एक्सटेंशन (जैसे .tmp) का उपयोग करेंगे और पूरा होने पर इसका नाम बदल देंगे।
दान डिप्लो

5
जब आपके प्रोग्राम के कई इंस्टेंस एक ही समय में एक ही फाइल अपलोड करने की कोशिश कर सकते हैं, तो कुछ समय के लिए टेम्पररी फाइल लिखना भी उपयोगी होता है, और आप सही लॉकिंग लेवल प्रदान करने के लिए फाइल सिस्टम पर भरोसा नहीं कर सकते (जैसे खराब-परिभाषित क्लाउड स्टोरेज एपीआई) । अस्थायी फ़ाइल का उपयोग करना सुनिश्चित करेगा कि परिणामी फ़ाइल दोनों अपलोड से डेटा के मिश्रण के साथ समाप्त नहीं होगी। बेशक यह परमाणुता का सिर्फ एक और उदाहरण है।
Krzysztof Kozielczyk

1
मौजूदा फाइल को अपडेट करते समय डैन डिप्लो का मामला उपयोगी है। आप पुराने को तब तक बदलना नहीं चाहते जब तक कि नया सफलतापूर्वक लिखा न जाए, ऐसा न हो कि नया लिखने में असफल हो या कुछ और पूरी तरह से लिखे जाने से पहले नया पढ़ें।
राल्फचपिन

1
दुर्भाग्यवश, हालाँकि OS Temp फ़ोल्डरों को पुरानी फ़ाइलों और फ़ोल्डरों से भरा जाता है क्योंकि OS इसे साफ़ नहीं करता है! तो हम डेवलपर्स के रूप में अभी भी इसे साफ करना चाहिए! superuser.com/questions/296824/…
markmnl

15

यह विंडोज में एक मुद्दा प्रतीत होता है, विशेष रूप से ड्रैग-ड्रॉप को प्रबंधित करने के तरीके से संबंधित है।

के डेवलपर्स WinSCP ग्राहक अपने स्वयं के शेल एक्सटेंशन है, जो इस खींचें ड्रॉप व्यवहार को ओवरराइड करता है और तुरंत सही फ़ोल्डर में फ़ाइल छोड़ने की अनुमति देता है विकसित किया है। वे अपने प्रलेखन में चाल की व्याख्या करते हैं और, अधिक दिलचस्प है कि समस्या क्या है और उन्होंने इसे कैसे हल किया।

यहाँ दिलचस्प हिस्सा है:

विंडोज ड्रैग एंड ड्रॉप मैकेनिक्स ड्रैग एंड ड्रॉप ऑपरेशन के स्रोत एप्लिकेशन को आसानी से पता लगाने की अनुमति नहीं देता है, जहां फाइलें गिरा दी जाती हैं। यह गंतव्य तक फ़ाइलों को स्थानांतरित करने के लिए एप्लिकेशन (विंडोज एक्सप्लोरर आमतौर पर) को लक्षित करना है। यह उचित नहीं है, क्योंकि स्रोत एप्लिकेशन सभी संभावित गंतव्यों में फ़ाइलों को स्थानांतरित कर सकते हैं। ध्यान रखें कि आप फ़ाइलों को न केवल एक निर्देशिका में, बल्कि यहां तक ​​कि ज़िप फ़ाइल (या किसी अन्य संग्रह), दूरस्थ निर्देशिका (एफ़टीपी, एसएफटीपी, एससीपी,…), कचरा,…

जाहिर है यहां तक ​​कि विंडोज एक्सप्लोरर (या किसी अन्य लक्ष्य एप्लिकेशन, जैसे WinZip) किसी भी संभावित स्रोत से फाइलें डाउनलोड नहीं कर सकता है (विशेषकर यह SFTP / SCP नहीं जानता है)।

इसके अलावा, विशेष रूप से 7Zip के लिए: उपयोगकर्ता ray023 सुपरयूजर स्टैक क्यू एंड ए में इस सवाल का जवाब देता है: https://superuser.com/a/422463

असल में, यदि आप अपनी फाइल को ड्रैग-ड्रॉप करने के बजाय 7-ज़िप और विनर में उपलब्ध "एक्सट्रैक्शन" मेथड का उपयोग करते हैं, तो फाइलें सीधे डायरेक्ट डाइरेक्टरी में आ जाती हैं।


2
सवाल यह नहीं था कि "7zip अस्थायी फ़ाइलों का उपयोग क्यों करता है?" वास्तविक सवाल यह था कि "सॉफ़्टवेयर डेवलपमेंट में आमतौर पर अस्थायी फ़ाइलों का उपयोग क्यों किया जाता है?"
फिल

@Phil का उदाहरण दिया गया है, जो मैं समझता हूं, वह तब होता है जब आप संग्रह में से एक फ़ाइल को सिस्टम पर एक फ़ोल्डर में खींचते हैं, बिना इसे "निकालने" के लिए। फिर भी, मैंने प्रश्न को फिर से पढ़ा, और हाँ, मुझे लगता है कि आप सही हैं कि लेखक अस्थायी फ़ोल्डरों की उपयोगिता के बारे में अधिक जानना चाहता था, जिस तरह से टेम्डमर्स द्वारा जवाब दिया गया था (मेरे द्वारा भी मतदान किया गया था)
जलयाने

हालांकि आपका जवाब ठीक वैसा नहीं था जैसा मैं 7zip के साथ अपनी समस्या को हल करने के लिए +1,
देवदत्त तेंगशे

1
अच्छी टिप्पणी मूल रूप से उबलती है: एक प्रोग्राम एक अस्थायी फ़ोल्डर का उपयोग क्यों करता है? क्योंकि जब इसे खींचने और छोड़ने से गंतव्य फ़ोल्डर का पता नहीं चलता है और बस विंडोज़ को "इसे" देता है, तो विंडोज़ पर ले जाता है और फ़ाइल को सही जगह पर रखता है।
पीटर बी

0

यदि आपको फ़ाइल को किसी भी प्रकार की डेटा प्रोसेसिंग (डीकोड / कन्वर्ट / आदि) करनी है, तो अस्थायी फ़ाइल का उपयोग करना बेहतर होता है और पूरा होने पर, और केवल पूरा होने पर, परिणाम को अंतिम गंतव्य पर स्थानांतरित करें।

लाभ:

  1. केवल पूर्ण की गई फ़ाइलें गंतव्य तक पहुँचती हैं
  2. तेज मीडिया में अस्थायी फ़ाइल (चाहिए) होनी चाहिए
  3. अंतिम फ़ाइल पर विखंडन से बचें
  4. अंतिम गंतव्य के रूप में अन्य मीडिया के उपयोग की अनुमति देता है (ftp, cloud, जो भी हो)
  5. एबर्ड टेम्प फाइल को साफ करना आसान है

मुझे डेटा को संसाधित करते समय सीधे गंतव्य पर लिखने का वास्तविक लाभ नहीं दिखता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.