2013-09-04 12 views
5

में फ़ाइल पढ़ने के दौरान मेरे पास एक प्रक्रिया है जो एक temp निर्देशिका में फ़ाइल लिखती है। फ़ाइल साझा पढ़ने के उपयोग के बिना लिखी जा रही है, ताकि अगर कोई इसे लिखा जा रहा है, तो इस फ़ाइल को पढ़ने का प्रयास करता है, फेंक दिया जाएगा, जो ठीक है।यादृच्छिक अनधिकृत एक्सेस अपवाद% temp%

कुछ दुर्लभ मामलों में, मुझे लगता है कि इस फ़ाइल को पढ़ने का प्रयास करते समय मुझे UnauthorizedAccessException मिल रहा है। मैं काफी निश्चित हूं (लॉग से) कि फ़ाइल को लिखा नहीं जा रहा है, लेकिन मुझे कोई अन्य कारण नहीं दिख रहा है जिसके लिए मुझे इसका उपयोग नहीं होगा।

इसके अलावा, प्रक्रिया विजुअल स्टूडियो एक्सटेंशन से चलती है, जिसका अर्थ है कि इसमें मूल प्रक्रिया (विजुअल स्टूडियो स्वयं) के समान अनुमतियां हैं।

new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read); 

कभी कभी, यह लाइन एक UnauthorizedAccessException फेंकता है:

यहाँ मैं कैसे फ़ाइल को खोलने का प्रयास है। कोई विचार क्यों?

+0

शायद वायरस स्कैनर उस फ़ाइल तक पहुंच रहा है? – Steven

+0

शायद, लेकिन फिर, संयुक्त अरब अमीरात? मैं केवल एक IOException की उम्मीद करेंगे। –

+0

http://www.codeproject.com/Questions/93239/System-UnuthorizedAccessException http://www.csharp-examples.net/filestream-open-file/ – SK2185

उत्तर

3

यह निश्चित रूप से एक साझाकरण समस्या नहीं है, जो एक साझाकरण उल्लंघन त्रुटि उत्पन्न करता है और इसकी रिपोर्ट IOException के साथ की जाती है।

अनधिकृत एक्सेस अपवाद के लिए केवल दो सभ्य स्पष्टीकरण हैं। एक तार्किक है, फ़ाइल एक कस्टम एसीएल के साथ बनाई गई है जो आसानी से पहुंच से इंकार कर देती है। इस मामले में आपको उस प्रक्रिया के बारे में बहुत कुछ पता होना चाहिए जिसने फ़ाइल बनाई है और इसे सिर पर फटकारा है, इसलिए यह ऐसा करना बंद कर देता है। उस प्रक्रिया द्वारा उपयोग किए जाने वाले उपयोगकर्ता खाते को नियंत्रित करना महत्वपूर्ण हो सकता है।

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

यह समस्या डिबग करना मुश्किल है अगर यह अक्सर होता है और फ़ाइल जल्दी से गायब हो जाती है। फ़ाइल खोलने में विफल प्रयासों को लॉग करने के लिए आप enable auditing कर सकते हैं।

0

व्यक्तिगत रूप से मैं आपकी फ़ाइल के लिए फ़िल्टर के साथ ProcMon http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx चलाता हूं और देखता हूं कि फ़ाइल को एक्सेस करने और आपके कोड के रास्ते में कुछ और है या नहीं।

+0

धन्यवाद, लेकिन यह मेरी मशीन पर नहीं होता है, लेकिन कई उपयोगकर्ताओं की मशीनों पर। मुझे बस लॉग मिला है। शायद अगर हम इसे 'लाइव' पकड़ सकते हैं, तो मैं उपयोगकर्ता को ProcMon चलाने के लिए कह सकता हूं ... –

+2

शायद आपके अपवाद में http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx का उपयोग करें? और इसे लॉग में सहेजें। इसके अलावा, आप इनमें से कुछ को आजमा सकते हैं, http://stackoverflow.com/questions/4964588/open-file-readonly शायद इसे रीडवाइट मोड में खोलने से इनकार कर दिया जा सकता है। या आपके पास अपने स्वयं के धागे का उपयोग कर रहा है, जिससे आप स्वयं को फ़ाइल बना सकते हैं? – Sarkie

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