सिस्टम। अपवाद। HResult संपत्ति संरक्षित है। मैं अपवाद के अंदर कैसे देख सकता हूं और एचआरएसल्ट को प्रतिबिंब या अन्य बदसूरत हैक्स का उपयोग किए बिना कैसे प्राप्त कर सकता हूं?
मैं एक बैकअप उपकरण है, जो खोलता है और एक प्रणाली पर फ़ाइलें पढ़ता लिखना चाहते हैं:मैं System.IO.IOException के लिए HResult कैसे निर्धारित करूं?
यहाँ की स्थिति है। this guidance के अनुसार, मैं FileAccess.Read और FileShare.ReadWrite के साथ फ़ाइल खोलता हूं, क्योंकि मुझे यह परवाह नहीं है कि फ़ाइल पढ़ने के समय फ़ाइल के लिए खुला है या नहीं।
कुछ मामलों में, जब मैं जो फ़ाइल पढ़ रहा हूं वह किसी अन्य ऐप द्वारा खुलती है, तो System.IO.FileStream.Read() विधि एक System.IO.IOException फेंकता है, "प्रक्रिया फ़ाइल तक नहीं पहुंच सकती क्योंकि एक और प्रक्रिया है फ़ाइल के एक हिस्से को बंद कर दिया "। यह error 33 है, या मुझे लगता है कि HResult 0x80070021 है। [संपादित:। मेरा मानना है कि जब किसी अन्य प्रक्रिया कॉल LockFileEx एक फ़ाइल के भीतर एक बाइट रेंज लॉक करने के लिए इस वापस किया जा सकता]
मैं रोक सकते हैं और पुन: प्रयास जब मैं इस त्रुटि प्राप्त करना चाहते हैं। मुझे लगता है कि यह यहां लेने के लिए उचित कार्रवाई है। यदि लॉकिंग प्रक्रिया बाइट-रेंज लॉक को तुरंत रिलीज़ करती है, तो मैं फ़ाइल को पढ़ना जारी रख सकता हूं।
मैं इस कारण से किसी अन्य कारण से IOException को कैसे अलग कर सकता हूं? मैं इन तरीकों के बारे में सोच सकता हूं:
- निजी प्रतिबिंब - ऐसा नहीं करना चाहते हैं। पेर्फ डूब जाएगा।
- कॉल अपवाद। टोस्टिंग() और स्ट्रिंग को पार्स करें। हैकी लगता है। I18n संस्करणों में काम नहीं करेगा।
मुझे इन विकल्पों को पसंद नहीं है। क्या कोई बेहतर, साफ रास्ता नहीं है?
मैंने अभी खोज की और System.Runtime.InteropServices.Marshal.GetHRForException पाया। क्या यह 0x80070021 की तरह एक संकेत वापस करेगा?
> निजी प्रतिबिंब - ऐसा नहीं है चाहता हूँ। पेर्फ डूब जाएगा। - अपवाद perf वैसे भी बदबू आ रही है, तो मैं perf पहलू के बारे में चिंता नहीं होगी। प्रतिबिंब करता है - हालांकि - पूर्ण ट्रस्ट की आवश्यकता है, बदसूरत है, और असमर्थित है और टूटने के लिए प्रवण है - यही कारण है कि आपको यह नहीं करना चाहिए। –