2011-05-13 9 views
21

में आज मैं एक अजीब समस्या में भाग गया: एक वर्ष और आवेदन के कई संस्करण/परीक्षणों के बाद से फ़ाइल को प्रतिस्थापित करने के लिए निम्नलिखित कोड का सफलतापूर्वक उपयोग किया गया है दूसरे के साथ।फ़ाइल #Replace और (File.Delete + File.Move) के बीच अंतर C#

File.Replace(path + ".tmp", path, null); 

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

प्रक्रिया फ़ाइल तक नहीं पहुँच सकता है क्योंकि यह अन्य प्रक्रिया द्वारा किया जा रहा है

जब मैं निम्नलिखित कोड का उपयोग करें ऊपर की, यह काम करता है:

File.Delete(path); 
File.Move(path + ".tmp", path); 

तो मेरे सवालों का:

  • दो कोड स्निपेट के बीच क्या अंतर है?
  • क्या यह हो सकता है कि माइक्रोसॉफ्ट ने 'फाइल.रिप्लेस' के तरीके को बदल दिया है?

मैं नेट फ्रेमवर्क 4.0 का उपयोग कर रहा हूँ दृश्य स्टूडियो के साथ 2010

धन्यवाद अग्रिम में।

+1

आपके पास सर्वर पर चल रहे इन उबर-उत्सुक 'सुरक्षा उपकरण' में से एक नहीं है, जो 'पहुंच सुरक्षा' या कुछ में गड़बड़ कर रहा है, है ना? क्या यह हर सर्वर के साथ होता है? क्या यह एक विशिष्ट तारीख पर काम करना बंद कर दिया और उस समय सर्वर पर क्या हुआ? आपके उत्तर के लिए –

+0

thx: हमारे पास विशेष "über" सुरक्षा उपकरण नहीं है और कुछ समय से बुनियादी ढांचे को नहीं बदला है। समस्या अन्य नेटवर्कों में अन्य मशीनों पर भी दिखाई देती है। मुझे तारीख बिल्कुल नहीं पता लेकिन मैं फरवरी 2011 से पहले कहूंगा कि यह काम कर चुका है ... – dataCore

+1

'फाइल। रीप्लेस' मांग स्रोत और गंतव्य दोनों पर अनुमति पढ़ने और लिखने की मांग करता है, फिर पी/'रीप्लेसफाइल' को आमंत्रित करता है। सुराग के लिए 'ReplaceFile' पर दस्तावेज़ देखें। http://msdn.microsoft.com/en-us/library/aa365512.aspx – Tergiver

उत्तर

4

यहाँ MSDN article पर File.Replace()

मूल की एक बैकअप बनाना अंतर प्रतीत होता है।

+0

Thx आपके उत्तर के लिए। आपका मतलब है कि मैं बैकअप पथ निर्दिष्ट नहीं करता हूं? मुझे अभी भी यह नहीं मिला ... इससे पहले यह काम कर चुका है। * संपादित करें: मैंने बैकअप पथ के साथ प्रयास किया - अभी भी वही त्रुटि संदेश – dataCore

1

फिल मरे द्वारा लिखे गए लेख में कहा गया है कि File.Replace फ़ाइल के सामग्री को प्रतिस्थापित करता है। शायद यह फ़ाइल को लेखन पहुंच के साथ खोलने की कोशिश कर रहा है?

+0

मेरे पास "व्यवस्थापक" है - यूएनसी पथ पर राइट्स। = पूर्ण नियंत्रण। लेकिन हां, शायद यह यूएसी चीज है "यूएनसी पथ पर एक फाइल खोलें" चेक – dataCore

+0

यूएसी (उपयोगकर्ता खाता नियंत्रण) को निष्क्रिय करने पर कोई प्रभाव नहीं है – dataCore

+1

यदि किसी अन्य एप्लिकेशन में फ़ाइल खोलती है तो यह लेखन पहुंच को अवरुद्ध कर सकती है। क्या कोई अन्य प्रोग्राम उस फ़ाइल तक पहुंचता है? –

5
- MSDN on File.Replace

File.Replace अनुसार एक अपवाद जब फेंक होगा

...

  • गंतव्य फ़ाइल गुम है।
  • स्रोत और गंतव्य विभिन्न संस्करणों

पर हैं कौन सा File.Delete, File.Move नहीं होगा।

+2

के काम करता है, इसलिए यदि स्रोत और गंतव्य विभिन्न वॉल्यूम्स पर हैं, तो यह अपवाद फेंक देगा? कार्यान्वयन के लिए क्या है ... लिंक के लिए धन्यवाद! – dataCore

+1

@dataCore 'प्रतिस्थापन' का उद्देश्य फ़ाइल को प्रतिस्थापित करना है। Move + Delete का उपयोग करते समय, आप बस एक नई फ़ाइल बनाते हैं। प्रतिस्थापन सुरक्षा विशेषताओं, वैकल्पिक डेटा स्ट्रीम, फ़ाइल आईडी, एन्क्रिप्शन, संपीड़न, निर्माण दिनांक इत्यादि को सुरक्षित रखता है। ध्यान दें कि 'फ़ाइल.मोव' वॉल्यूम के पार काम करने का एकमात्र कारण यह है कि यह विशेष रूप से कॉपी + हटाएं पर वापस गिरकर उस कार्यक्षमता को लागू करता है - अंतर्निहित winapi MoveFile स्पष्ट कारणों से वॉल्यूम के बीच फ़ाइलों को स्थानांतरित करने की अनुमति नहीं देता है (एक वॉल्यूम पर चलती फ़ाइल फ़ाइल के पथ को बदलने का एक कार्य है, इसमें कोई प्रतिलिपि शामिल नहीं है)। – Luaan

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