मुझे कंप्यूटर पर (निर्देशिकाInfo के माध्यम से) विभिन्न निर्देशिकाओं के माध्यम से जाना होगा। उनमें से कुछ पहुंच योग्य नहीं हैं, और अनधिकृत एक्सेस अपवाद होता है। अपवाद को पकड़ने के बिना मैं निर्देशिका पहुंच कैसे देख सकता हूं?.NET - जांचें कि अपवाद हैंडलिंग के बिना निर्देशिका सुलभ है
उत्तर
आपको Security
नामस्थान का उपयोग करने की आवश्यकता है।
this SO उत्तर देखें।
जवाब से:
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if(!SecurityManager.IsGranted(writePermission))
{
//No permission.
//Either throw an exception so this can be handled by a calling function
//or inform the user that they do not have permission to write to the folder and return.
}
अद्यतन: (निम्न टिप्पणी) सुरक्षा नीतियों के साथ
FileIOPermission
सौदों अनुमतियाँ फ़ाइल में नहीं है, तो आप DirectoryInfo.GetAccessControl
उपयोग करने के लिए की जरूरत है।
बस डालें आप नहीं कर सकते हैं। यह जांचने का कोई तरीका नहीं है कि कोई निर्देशिका सुलभ है या नहीं, आप यह निर्धारित कर सकते हैं कि यह सुलभ था। जैसे ही चेक अनुमति पूर्ण हो जाती है, कारण बदल सकता है और आपकी जांच को अमान्य कर सकता है। सबसे विश्वसनीय रणनीति जिसे आप कार्यान्वित कर सकते हैं निर्देशिकाओं तक पहुंचने और UnauthorizedAccessException
पकड़ने के लिए है।
मैं हाल ही में इस विषय पर एक ब्लॉग लेख जो
आप सिर्फ एक सरल थोड़ा बूलियन समारोह बनाने के लिए और एक निर्देशिका जानकारी चर कोशिश हो सकता था यहाँ विस्तार का एक सा में चला जाता है लिखा था किसी दिए गए पथ से निर्देशिका प्राप्त करने के लिए। यदि यह कोई समस्या नहीं है, तो सत्य वापस आएं, अगर अपवाद संभालता है, झूठी वापसी करता है, या उप अपवादों के लिए अपवाद खंड को तोड़ देता है और त्रुटि कोड प्राप्त करता है।
मैंने कोशिश की है: मंद readPermission न्यू FileIOPermission (FileIOPermissionAccess.Read, "C: \ Users \ व्यवस्थापक \ Documents \ मेरी तस्वीरें") के रूप में ऊपर निर्देशिका का उपयोग करने का प्रयास का उत्पादन "प्रवेश निषेध", लेकिन "SecurityManager IsGranted (readPermission) "हमेशा सच देता है। – SharpAffair
http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx से: 'अनुमतियों का अनुदान नीति द्वारा निर्धारित किया जाता है और ओवरराइड के अधीन मांग से अलग होता है, जैसे एक जोर । इसके अलावा, IsGranted केवल कॉलर कोड असेंबली के अनुदान का परीक्षण करता है, जो स्टैक पर अन्य कॉलर्स से स्वतंत्र है। – Oded
यह सही उत्तर नहीं है। फ़ाइल IOPermission सीएएस के साथ सौदों, फाइल सिस्टम नहीं। दूसरे शब्दों में, क्या .NET सुरक्षा नीति पहुंच की अनुमति देती है। आपके पास सीएएस एक्सेस हो सकती है लेकिन विंडोज अभी भी इनकार कर सकता है। DirectoryInfo.GetAccessControl() की आवश्यकता है। –