2012-01-12 12 views
7

पर लिख सकता है .NET में, क्या यह जांचने का एक आसान तरीका है कि वर्तमान उपयोगकर्ता को निर्देशिका में फ़ाइल बनाने के लिए उपयोग किया गया है या नहीं? सी ++ _access फ़ंक्शन के बराबर कुछ आदर्श होगा।.NET में, जांचें कि वर्तमान उपयोगकर्ता निर्देशिका

मैं परीक्षण और त्रुटि का उपयोग नहीं करना चाहता (एक डमी फ़ाइल बनाएं और फिर इसे हटाएं): हैकिश लगने के अलावा, अन्य सॉफ़्टवेयर गिराए गए फ़ाइलों के लिए निर्देशिका में निर्देशिका की निगरानी कर रहा है।

मैं System.DirectoryServices उपयोग करने के लिए नहीं करना चाहती:, एसीएल के को देखकर समूह सदस्यता को हल करने के लिए और कैसे अलग समूह सदस्यता से अनुमतियाँ बातचीत त्रुटियों की संभावना और भी कठिन लगता है। कहीं हाँ या ना-फ़ंक्शन होना चाहिए, नहीं?

अग्रिम धन्यवाद!

[संपादित करें] बोनस के रूप में, अगर यह नेटवर्क शेयर के लिए भी काम करेगा, तो यह अच्छा होगा।

+1

http://stackoverflow.com/a/265958/284240 इसलिए अपवादों को संभालें। –

+0

संभावित डुप्लिकेट [कैसे जांचें कि मैं सी # में किसी विशिष्ट फ़ोल्डर में फ़ाइल बना सकता हूं?] (Http://stackoverflow.com/questions/316903/how-to-check-if-i-can-create-a -फाइल-इन-ए-विशिष्ट-फ़ोल्डर-इन-सी) – Joe

+0

इस उत्तर को जांचें, इसे VB.NET में परिवर्तित करने के लिए छोटा होना चाहिए ;-) http://stackoverflow.com/a/130641/559144 –

उत्तर

5
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); 
if (SecurityManager.IsGranted(writePermission)){ 
    //write here 
} else { 
    //some error message 
} 
+0

मान लीजिए कि यह काम करता है (मुझे आशा है), उन उत्तरों में से एक जो मुझे अपवित्र बनाता है, सवाल उठाता है, और इसे पसंदीदा बनाता है :) –

+0

बहुत अच्छा लगता है! मुझे इसकी कोशिश करने दीजिए। –

+1

यह मेरे लिए काम नहीं करता प्रतीत होता है। किसी कारण से यह हमेशा सच हो जाता है। यह कुछ ऐसा होना चाहिए जो मैं गलत कर रहा हूं, लेकिन यह इतना आगे है, मैं नहीं देखता कि यह क्या होगा।/sigh ... मैंने इसे स्वीकार्य के रूप में चिह्नित किया है, क्योंकि यह मुझे सही एपीआई के लिए इंगित करता है। मुझे बस इसे काम करना है, मुझे लगता है कि –

0

निम्नलिखित एक DirecotrySecurity उदाहरण http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

DirectoryInfo(pathstr).GetAccessControl() 
+1

क्या यह वर्तमान उपयोगकर्ता पर लागू होता है? मैंने इसे देखा और यह एसीएल तक पहुंच प्रदान करता था।यह कह सकता है कि "फू प्रबंधक" उपयोगकर्ता समूह में लेखन पहुंच है और "बार श्रमिक" को अस्वीकार कर दिया गया है, लेकिन यह हल करने में मेरी सहायता नहीं करता है कि वर्तमान उपयोगकर्ता समूह के सदस्य हैं जो इन समूहों में से किसी एक सदस्य हैं। शायद मुझे लगता है कि उस बिट को हल करने के लिए कैसे –

5

अग्रिम में अनुमति के लिए जांच की जा रही वापस आ जाएगी एक dicey परियोजना है। जटिल एसीएल सूची के माध्यम से चलने और प्रभावी अनुमति सेट की गणना करने के लिए जटिल का उल्लेख नहीं करना है।

आगे ... कोई गारंटी नहीं है। सिर्फ इसलिए कि आपने समय से पहले अनुमति के लिए सक्रिय रूप से जांच की है, इसका मतलब यह नहीं है कि फ़ाइल बनाने की कोशिश करते समय अनुमतियां बदली नहीं जाएंगी।

"सही" जिस तरह से एक security demand, या तो एलान के तौर पर FileIOPermissionAttribute या लाजि़मी साथ बनाने के लिए, FileIOPermission का एक उपयुक्त उदाहरण बनाकर और उसके Demand() विधि लागू कर रहा है। यदि आपके पास वांछित अनुमतियां हैं, तो Demand() पर कॉल सफल होता है; अन्यथा यह SecurityException फेंकता है, जिसे आपको पकड़ने और कार्य करने की आवश्यकता होगी।

मेरे अनुभव में, अनिवार्य जांच आसान है।

यह भी ध्यान दिया जाना चाहिए कि विंडोज 7 में, जबकि आप अवधारणात्मक रूप से निर्देशिका तक पहुंच लिख सकते हैं, फिर भी यह तब तक काम नहीं कर सकता जब तक कि आप उन्नत अनुमतियों के साथ नहीं चल रहे हों।

+0

मैं पूरी तरह से सहमत हूं। मैं असफल होने वाले ऑपरेशन की सुरक्षा के लिए अनुमतियों की जांच नहीं करना चाहूंगा। हमारे पास एक विरासत प्रणाली है जिसमें सॉफ़्टवेयर के कई टुकड़े हैं जो कई सर्वरों पर चलते हैं और व्यवस्थापक/कॉन्फ़िगरेशन समस्याओं से प्रभावित होते हैं। मुझे एक ऐप लिखना होगा जो कॉन्फ़िगरेशन त्रुटियों की तलाश में हो, लेकिन अस्थायी परीक्षण/डमी फाइलों या जैसे किसी भी मौके के साथ, निष्क्रिय रूप से ऐसा करना चाहिए। –

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