2012-08-15 56 views
6

में किसी नेटवर्क ड्राइव पर फ़ाइल को किसने लॉक किया है, एक नेटवर्क ड्राइव साझा करने वाली कई मशीनों पर एक प्रोग्राम चल रहा है। यहपता लगाएं कि सी #

... = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); 

लिखने से फ़ाइल को लॉक करने के लिए उपयोग कर सकता है। अन्य सभी उदाहरण तब केवल इसे पढ़ सकते हैं और एक चेतावनी प्रदर्शित कर सकते हैं, कि फ़ाइल लिखने योग्य नहीं है।

चेतावनी के साथ प्रदर्शित करने के लिए मुझे यह पता कैसे लगा सकता है कि (यानी कौन सी मशीन) फ़ाइल फ़ाइल को बंद कर देती है?

+0

जब तक आपके पास दूरस्थ कंप्यूटर पर व्यवस्थापकीय अधिकार नहीं हैं, तो आप नहीं कर सकते। शेयर केवल पढ़ने के लिए ही किया जा सकता है। –

+1

मान लें कि आपके पास नेटवर्क सर्वर पर पर्याप्त विशेषाधिकार हैं, आप 'NetFileEnum' का उपयोग कर सकते हैं। –

उत्तर

3

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

यह मानता है कि आपके पास उस सॉफ्टवेयर पर नियंत्रण है जो इसे अन्य पीसी पर पढ़ रहा है।

1

यहां प्रक्रिया सूची को देखने और प्रत्येक प्रक्रिया द्वारा लॉक की गई फ़ाइलों को जांचने के उदाहरण के लिए सी # स्रोत कोड के साथ एक पोस्टिंग है।

How does one figure out what process locked a file using C#

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

डेटा में प्रोसेस नाम, उपयोगकर्ता आईडी और प्रक्रिया सूची से उपलब्ध अन्य जानकारी शामिल हो सकती है।

यह दृष्टिकोण अधिक काम है, हालांकि यह कुछ भी करने के लिए फ़ाइल लॉक करने के अनुप्रयोगों की आवश्यकता के बिना जानकारी तक पहुंचने का एक तरीका प्रदान करता है।

दूसरी तरफ यदि आपकी रुचि रखने वाली फाइलें आपके नियंत्रण में हैं और आप फ़ाइल का उपयोग निर्धारित कर सकते हैं, तो यह शायद अधिक है।

+0

क्या यह काम करेगा यदि प्रक्रिया एक ही मशीन पर नहीं है? – KingCronus

+0

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

+0

विचारों को समझना। मुझे शायद ऐसा करना होगा, अगर मेरे पास उन प्रोग्रामों पर कोई नियंत्रण नहीं था जो फ़ाइल को लॉक कर सकते थे। चूंकि मेरे पास है, फाइलों को लॉक करना आसान है। – Niklas

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