2010-01-02 9 views
6

सी ++ (विशेष रूप से विज़ुअल सी ++ पर) में, कभी-कभी आप फ़ाइल नहीं खोल सकते हैं क्योंकि एक अन्य निष्पादन योग्य इसे खोला गया है और इसे पढ़ने के लिए साझा नहीं कर रहा है। अगर मैं ऐसी फाइल खोलने की कोशिश करता हूं, तो मैं प्रोग्रामिक रूप से यह कैसे पता लगा सकता हूं कि फ़ाइल लॉक कर रहा है?Win32 फ़ाइलों को पढ़ने के लिए बंद कर दिया गया है: यह पता लगाने के लिए कि उन्हें कौन लॉक कर रहा है

उत्तर

11

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

यदि आप वास्तव में ऐसा करने में रुचि रखते हैं, तो this project पर एक नज़र डालें।

+0

आप देख सकते हैं कि प्रक्रिया एक्सप्लोरर 'सिस्टम' प्रक्रिया के डीएलएल को देखकर ड्राइवर लोड कर रहा है; आपको 'PROCEXP113.SYS' के समान ड्राइवर दिखाई देगा –

3

एमएसडीएन अनुमोदित तरीका IFileIsInUse::GetAppName() है। हालांकि, Vista की आवश्यकता है।

+0

लोड होने वाले प्रोग्राम से सहयोग की आवश्यकता होती है, जो कि एक फ़ाइल खोला गया है, जो कि पूछा जा रहा है जैसा नहीं है। – Mehrdad

+0

यह सबसे अधिक जानकारी युक्त तरीका है, यही कारण है कि आपको पहले इसे आजमाएं। – MSalters

+1

निश्चित रूप से, इसे आजमाने में कोई हानि नहीं है, लेकिन यह काम करने की संभावना बहुत कम है इसलिए ओपी को सबसे अधिक संभावना के बिना एक विकल्प की आवश्यकता होगी। – Mehrdad

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

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