2008-11-25 8 views
6

मुझे यह जानने की ज़रूरत है कि क्या मैं किसी विशिष्ट फ़ोल्डर में फ़ाइल बना सकता हूं, लेकिन अनुमतियों, डुप्लिकेट फ़ाइलों आदि जैसे चेक करने के लिए बहुत सी चीजें हैं I मैं File.CanCreate(@"C:\myfolder\myfile.aaa" जैसे कुछ ढूंढ रहा हूं), लेकिन इस तरह की कोई विधि नहीं मिली है। एकमात्र चीज जो मैंने सोचा था वह एक डमी फ़ाइल बनाने और अपवादों की जांच करने का प्रयास करना है, लेकिन यह एक असभ्य समाधान है जो प्रदर्शन को भी प्रभावित करता है। क्या आप एक बेहतर समाधान जानते हैं?यह जांचने के लिए कि क्या मैं किसी विशिष्ट फ़ोल्डर में फ़ाइल बना सकता हूं

+0

नोट, हालांकि यह जांच कर रहा है कि क्या आप फ़ाइल बना सकते हैं (हालांकि किया गया) और फिर, बाद में, वास्तव में फ़ाइल बनाने से अभी भी एक त्रुटि उत्पन्न हो सकती है (आपके पास यहां रेस-हालत है)। इस प्रकार, यह आमतौर पर सबसे अच्छा होता है, केवल (अंतिम) फ़ाइल को पहली जगह बनाने और संभावित त्रुटियों/अपवादों को संभालने के लिए। –

+0

आप सही हैं लेकिन मैं बाद में उपयोग के लिए यह जानकारी प्रदान कर रहा हूं, अगर मैं इसके बाद अनुमतियां बदलता हूं, तो मैं केवल इस जानकारी को देने के लिए जिम्मेदार हूं, एक और प्रकार की त्रुटि फेंक दी जाएगी। –

उत्तर

14

असल में, एक डमी फ़ाइल बनाने के अधिकांश अनुप्रयोगों में एक बड़ा प्रदर्शन प्रभाव नहीं होने वाला है। बेशक, आप उन्नत अगर बनाने के साथ अनुमतियाँ नहीं बल्कि नष्ट यह थोड़ा बालों मिल सकता है ...

GUIDs हमेशा यादृच्छिक नाम (टकराव से बचने के लिए) के लिए काम कर रहे हैं - की तरह कुछ:

string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp"); 
// perhaps check File.Exists(file), but it would be a long-shot... 
bool canCreate; 
try 
{ 
    using (File.Create(file)) { } 
    File.Delete(file); 
    canCreate = true; 
} 
catch 
{ 
    canCreate = false; 
} 
1

आप CAS का उपयोग यह सत्यापित करने के लिए कर सकते हैं कि .NET नीतियां (कैस्पोल) उस स्थान पर फ़ाइल बनाने और लिखने को प्रतिबंधित कर रही हैं।

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

सबसे अच्छा और सबसे पूरा तरीका यह कोशिश करना है।

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