2009-08-19 6 views
32

मैं जब एक XML फ़ाइल के लिए लिख एक बहुत ही अजीब IOException प्राप्त किया:System.IO.Exception त्रुटि: "अनुरोधित ऑपरेशन किसी उपयोगकर्ता-मैप किए गए सेक्शन के साथ फ़ाइल पर नहीं किया जा सकता है।"

System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open. 

    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
    at System.Xml.XmlTextWriter..ctor(String filename, Encoding encoding) 
    at System.Xml.XmlDocument.Save(String filename) 

त्रुटि हो गई जब मैं XmlDocument सेव (स्ट्रिंग) समारोह कहा जाता है।

क्या हुआ इसके बारे में कोई विचार?

उत्तर

33

ऐसा लगता है कि फाइल मैपिंग (साझा मेमोरी) एपीआई का उपयोग करके फ़ाइल को खोलने के लिए एक और प्रक्रिया थी।

प्रक्रिया एक्सप्लोरर में ढूंढने का कार्य आपको बताने में सक्षम होना चाहिए।

+3

यह भी क्षणिक हो सकता है (बस मुझे क्या हुआ, अगले लिखने का प्रयास ठीक था, लेकिन मैं अगले फ़ाइल है, जो फिर अगले प्रयास पर ठीक काम किया पर असफल), की तरह एक एंटीवायरस स्कैनर आपके दुनिया के माध्यम से कमाल होता है। –

9

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

क्या आपके पास एक संपादक में फ़ाइल खुलती है? क्या आपके पास कुछ अन्य कोड है जो इसे पढ़ता है, लेकिन इसे बंद करना भूल जाता है?

आप Process Explorer का उपयोग यह पता लगाने के लिए कर सकते हैं कि किस प्रक्रिया में खुली फ़ाइल हैंडल है - Find/Find handle or DLL... कमांड का उपयोग करें।

+0

विन 2012 आर 2 में हैंडल या डीएलएल खोजें/ढूंढें/ – Owl

4

ओएस या फ्रेमवर्क आप असफल हो सकता है, यदि आप एक तंग पाश में बार-बार एक ही फाइल को खोलने का प्रयास, उदाहरण के लिए

while (true) { 
    File.WriteAllLines(...) 
} 

बेशक, आप नहीं चाहते हैं वास्तव में ऐसा करने के लिए । लेकिन आपके कोड में एक बग ऐसा होने का कारण बन सकता है। क्रैश आपके कोड के कारण नहीं है, लेकिन विंडोज या .NET Framework के साथ एक समस्या है।

यदि आपको बहुत सारी फाइलें बहुत जल्दी लिखनी है, तो आप थ्रेड के साथ एक छोटी देरी जोड़ सकते हैं। नींद() जो आपकी पीठ से ओएस भी प्राप्त कर रहा है।

while (i++<100000000) { 
    File.WriteAllLines(...) 
    Thread.Sleep(1); 
} 
+3

"एक छोटी सी नींद जो किसी कारण से इसे ठीक करती है" डालना कभी अच्छा विचार नहीं है :( –

+0

मैंने अपनी प्रतिक्रिया स्पष्ट की। मुझे एहसास है कि छोटी नींद एक अच्छा विचार नहीं है , लेकिन कभी-कभी यह ओएस या ढांचे की दया पर आप कर सकते हैं। यह क्रैश हुआ .NET 3.5 SP1 के साथ हुआ। –

6

डीबग करते समय अपनी परियोजना से फ़ाइल को बाहर करने का प्रयास करें। मैंने पाया कि यह वास्तव में वीएस -2010 था जो एक्सएमएल फाइल धारण कर रहा था। आप XML फ़ाइल पोस्ट डीबग की जांच के लिए अपने समाधान एक्सप्लोरर में "सभी फ़ाइलें दिखाएं" का चयन कर सकते हैं।

एकाधिक लिखते समय एक लॉक समस्या को रोक देगा।

lock(file){ write to file code here } 
संबंधित मुद्दे

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