2008-12-24 10 views
8

मेरे पास एक बहुत ही सामान्य स्थिति है। मेरे पास एक फ़ाइल है, और मुझे उस फाइल को पूरी तरह से नई सामग्री के साथ ओवरराइट करने की आवश्यकता है। हालांकि, मूल फ़ाइल को प्रत्येक पृष्ठ लोड पर एक्सेस किया जाता है (यह एक वेब ऐप है), इसलिए यह बहुत लंबे समय तक गायब नहीं हो सकता है। कुछ एमएस ठीक है (हालांकि आदर्श नहीं है), एक सेकंड ठीक नहीं है।पर्ल में एक क्रॉस-प्लेटफार्म, परमाणु फ़ाइल प्रतिस्थापन करने का सबसे अच्छा तरीका क्या है?

अभी मैं एक ही निर्देशिका में एक temp फ़ाइल लिखकर और फिर उस temp फ़ाइल को नई फ़ाइल के नाम पर नाम देकर ऐसा करता हूं। मैं पर्ल में ऐसा करने के लिए सामान्य फ़ाइल :: टेम्प और "नाम बदलें" का उपयोग कर रहा हूं। मैं सोच रहा था - क्या ऐसा करने के लिए कुछ और अनुशंसित/बेहतर तरीका है? अधिमानतः एक जिसे सीपीएएन मॉड्यूल की आवश्यकता नहीं है, क्योंकि यह मेरे सिस्टम में एकमात्र जगह है जिसे मुझे ऐसा करने की ज़रूरत है, और मैं इसके लिए पूरी तरह से नई निर्भरता नहीं चाहता हूं।

ओह, और इन सभी को विंडोज, लिनक्स, बीएसडी, ओएस एक्स, सोलारिस और अन्य सामान्य प्लेटफार्मों पर काम करना है।

Here is the code in question, रुचि रखने वालों के लिए।

उत्तर

10

आपकी विधि बस ठीक लगती है। यह तेज़ है, यह परमाणु है, यह केवल कोर मॉड्यूल का उपयोग करता है, और फ़ाइल :: Temp अस्थायी फ़ाइलों से निपटने का एक सुरक्षित तरीका है। आपको और क्या चाहिए?

+0

ठीक है, संभवतः केवल एक पुष्टि है कि यह वास्तव में सबसे अच्छा तरीका है। :-) मैं ज्यादातर सोच रहा था कि क्या ऐसा करने के लिए कोई अन्य विशेष रूप से अनुशंसित तरीका था, क्योंकि मैं किसी भी तरह से प्रश्न में कोड देख रहा था (एक बग ठीक करने के लिए) और मुझे लगा कि अब आवश्यक होने पर इसे सुधारने का अच्छा समय होगा । :-) –

+0

चालन ऑपरेशन परमाणु है, इसलिए यह जाने का एक अच्छा तरीका है। – Danny

6

मैं वही करूँगा जैसा आप कर रहे हैं। कम से कम यूनिक्स-प्रकार ओएस पर, फ़ाइल नाम परमाणु होने की गारंटी है, इसलिए आपके पास कोई भी इंस्टेंट नहीं होगा जहां मूल या नई फ़ाइलें न हों।

0

नाम बदलें पर्याप्त है। हालांकि:

क्या आपकी अस्थायी फ़ाइल दौड़ की स्थिति के लिए जोखिम में है? फ़ाइल नाम को यादृच्छिक किया जाना चाहिए ताकि कोई भी अपनी फ़ाइल डालने से समस्याएं पैदा कर सके। यदि संभव हो तो mkstemp() में एक इंटरफ़ेस का उपयोग करें।

+2

मुझे यकीन है कि फ़ाइल: Temp ठीक से यादृच्छिक है। –

+0

हाँ, फ़ाइल :: टेम्प सही ढंग से यादृच्छिक है, यह XXXXX कोड में है। –

+1

फ़ाइल :: Temp mkstemp और दोस्तों के बराबर पर्ल है, और सुरक्षा के साथ बहुत अधिक ध्यान में लिखा गया था। – ysth

संबंधित मुद्दे