फ़ाइल लॉक की जांच कैसे करें?

क्या यह जांचने का कोई तरीका है कि कोई फ़ाइल प्रयास / कैच ब्लॉक का उपयोग किए बिना लॉक है या नहीं?

अभी, मुझे पता है कि एकमात्र तरीका सिर्फ फाइल खोलना है और किसी भी System.IO.IOException को पकड़ना है।

0
जोड़ा संपादित
विचारों: 2
यह एक पुराना सवाल है, और सभी पुराने उत्तर अपूर्ण या गलत हैं। मैंने एक पूर्ण और सही उत्तर जोड़ा।
जोड़ा लेखक Eric J., स्रोत
मुझे पता है कि यह सवाल का जवाब नहीं है, लेकिन डेवलपर्स के कुछ सबसेट जो इस मदद के लिए देख रहे हैं, इस विकल्प में हो सकता है: यदि आप उस प्रक्रिया को शुरू करते हैं जो सिस्टम के साथ लॉक का मालिक है। डायग्नोस्टिक्स.प्रोसेज आप कर सकते हैं। WaitForExit ()।
जोड़ा लेखक amalgamate, स्रोत
समस्या यह है कि एक लॉक फ़ाइल के अलावा कई कारणों से IOException फेंक दिया जा सकता है।
जोड़ा लेखक JohnFx, स्रोत

5 उत्तर

नहीं, दुर्भाग्यवश, और यदि आप इसके बारे में सोचते हैं, तो यह जानकारी वैसे भी बेकार होगी क्योंकि फाइल अगले ही दूसरे लॉक हो सकती है (पढ़ें: लघु समय)।

विशेष रूप से आपको यह जानने की आवश्यकता क्यों है कि फ़ाइल को लॉक किया गया है या नहीं? यह जानकर कि आपको अच्छी सलाह देने का कोई और तरीका मिल सकता है।

यदि आपका कोड इस तरह दिखेगा:

if not locked then
    open and update file

फिर दो पंक्तियों के बीच, एक और प्रक्रिया आसानी से फ़ाइल को लॉक कर सकती है, जिससे आपको वही समस्या मिलती है जिसे आप शुरू करने से बचने की कोशिश कर रहे थे: अपवाद।

0
जोड़ा
हां, लेकिन एक फ़ाइल लॉक होने के लिए स्टैंडअलोन जांच बेकार है, ऐसा करने का एकमात्र सही तरीका फ़ाइल के लिए आवश्यक उद्देश्य के लिए फ़ाइल खोलने का प्रयास करना है, और फिर उस बिंदु पर लॉक समस्या को संभालना है। और फिर, जैसा कि आप कहते हैं, प्रतीक्षा करें, या किसी अन्य तरीके से इसका सामना करें।
जोड़ा लेखक Lasse Vågsæther Karl, स्रोत
@ बार्ट कृपया विस्तृत करें, वह विधि कहां परिभाषित है, क्या आप इसे एक लिंक प्रदान कर सकते हैं? और कृपया ध्यान दें कि मेरा उत्तर तीसरी तिमाही 2008, अलग .NET रनटाइम और सभी पोस्ट किया गया था, लेकिन फिर भी .... File.ReadWaitForUnlock क्या है?
जोड़ा लेखक Lasse Vågsæther Karl, स्रोत
फ़ाइल को लॉक करने वाली प्रक्रिया को प्राप्त करना अब संभव है। stackoverflow.com/a/20623302/141172 देखें
जोड़ा लेखक Eric J., स्रोत
मुझे लगता है कि सबसे अच्छा करना एक फ़ाइल है। ReadWaitForUnlock (फ़ाइल, टाइमआउट) विधि। और सफलता के आधार पर शून्य या फ़ाइलस्ट्रीम लौटाता है। मैं यहाँ तर्क का पालन कर रहा हूँ?
जोड़ा लेखक Bart Calixto, स्रोत
@ LasseV.Karlsen आपके उत्तर के आधार पर आपके द्वारा समाप्त किए गए कार्यों के लिए मेरा उत्तर चेकआउट करें। ReadWaitForUnlock मेरी खुद की विधि है, अंत में TryOpenRead में बदल गया।
जोड़ा लेखक Bart Calixto, स्रोत
आप पहुंच अधिकारों के लिए भी तर्क दे सकते हैं हालांकि यह निश्चित रूप से अधिक संभावना नहीं होगा।
जोड़ा लेखक ctusch, स्रोत
अगर फ़ाइल लॉक है, तो हम कुछ समय इंतजार कर सकते हैं और पुनः प्रयास कर सकते हैं। यदि फ़ाइल एक्सेस के साथ यह एक और प्रकार का मुद्दा है तो हमें अपवाद का प्रचार करना चाहिए।
जोड़ा लेखक DixonD, स्रोत
@ LasseV.Karlsen एक प्रीपेप्टिव चेक करने का एक और लाभ यह है कि आप संभावित लंबे ऑपरेशन और मध्य-मार्ग में बाधा डालने से पहले उपयोगकर्ता को सूचित कर सकते हैं। मिड-वे होने वाला लॉक अभी भी संभव है और इसे संभालने की आवश्यकता है, लेकिन कई परिदृश्यों में यह उपयोगकर्ता को काफी अनुभव करने में मदद करेगा।
जोड़ा लेखक Thiru, स्रोत

आप इस क्षेत्र पर इंटरऑप के माध्यम से LockFile को कॉल कर सकते हैं जिस फ़ाइल में आप रुचि रखते हैं। यह अपवाद नहीं फेंक देगा, अगर यह सफल होता है तो आपके पास फ़ाइल के उस हिस्से (जो आपकी प्रक्रिया द्वारा आयोजित किया जाता है) पर लॉक होगा, तब तक लॉक तब तक आयोजित किया जाएगा जब तक आप अनलॉकफ़ाइल या आपकी प्रक्रिया मर जाती है।

0
जोड़ा

आप देख सकते हैं कि फ़ाइल को पहले पढ़ने या लॉक करने का प्रयास करके लॉक किया गया है या नहीं।

Please see my answer here for more information.

0
जोड़ा

फिर दो पंक्तियों के बीच, एक और प्रक्रिया आसानी से फ़ाइल को लॉक कर सकती है, जिससे आपको वही समस्या मिलती है जिसे आप शुरू करने से बचने की कोशिश कर रहे थे: अपवाद।

हालांकि, इस तरह, आप जान लेंगे कि समस्या अस्थायी है, और बाद में पुनः प्रयास करने के लिए। (उदा।, आप एक धागा लिख ​​सकते हैं, अगर लिखने की कोशिश करते समय लॉक का सामना करना पड़ता है, तो लॉक खत्म होने तक पुनः प्रयास करता रहता है।)

दूसरी तरफ, IOException, स्वयं विशिष्ट नहीं है कि लॉकिंग आईओ विफलता का कारण है। ऐसे कारण हो सकते हैं जो अस्थायी नहीं हैं।

0
जोड़ा

इंटरऑप का उपयोग करने के बजाय आप .NET FileStream क्लास विधियों का उपयोग कर सकते हैं लॉक और अनलॉक:

FileStream.Lock http://msdn.microsoft.com/en-us/library/system.io.filestream.lock.aspx

FileStream.Unlock http://msdn.microsoft.com/en-us/library/system.io.filestream.unlock.aspx

0
जोड़ा
यह वास्तव में सही उत्तर है, क्योंकि यह उपयोगकर्ता को फ़ाइलों को लॉक / अनलॉक करने की अनुमति देता है लेकिन फाइलों के अनुभाग भी। "आप लेनदेन के बिना ऐसा नहीं कर सकते हैं" टिप्पणियां एक वैध चिंता उठा सकती हैं, लेकिन उपयोगी नहीं हैं क्योंकि वे नाटक कर रहे हैं कि कार्यक्षमता वहां नहीं है या जब यह नहीं है तो किसी भी तरह छिपी हुई है।
जोड़ा लेखक BrainSlugs83, स्रोत
असल में, यह समाधान नहीं है क्योंकि फ़ाइल लॉक होने पर आप फ़ाइलस्ट्रीम का उदाहरण नहीं बना सकते हैं। (एक अपवाद फेंक दिया जाएगा)
जोड़ा लेखक Zé Carlos, स्रोत