2008-10-15 14 views
14

मैं एक StreamReader उपयोग करने के लिए एक फ़ाइल को पढ़ने के लिए कोशिश कर रहा हूँ, लेकिन यह अन्य प्रक्रिया द्वारा उपयोग में हमेशा होता है तो मैं इस त्रुटि मिलती है:क्या मैं बस उपयोग में आने वाली फाइल को पढ़ सकता हूं?

The process cannot access the file '\arfjwknasgmed17\C$\FLAG CONDITION\CP-ARFJN-FLAG.XLS' because it is being used by another process.

वहाँ एक रास्ता मैं इसे कॉपी किए बिना यह पढ़ सकते हैं है? या यह मेरा एकमात्र विकल्प है?

उत्तर

25

आप फ़ाइल को केवल तभी पढ़ सकते हैं जब फ़ाइल खोलने वाले प्रोग्राम ने उस फ़ाइल पर पहले साझाकरण अधिकार निर्दिष्ट किया हो।

यदि फ़ाइल में वास्तव में कोई साझा साझाकरण अधिकार नहीं है, तो आप इसे पहले स्थान पर कॉपी नहीं कर पाएंगे।

यदि आप किसी साझाकरण को निर्दिष्ट कर रहे हैं, तो आप फ़ाइल को एक्सेस करने में सक्षम नहीं हो सकते हैं जो कि पहले से ही फ़ाइल खोलने वाले प्रोग्राम के साझाकरण अधिकार के साथ संघर्ष करता है। उदाहरण के लिए यदि आप पहले से खोले गए प्रोग्राम को लेखन पहुंच प्रदान नहीं कर रहे हैं तो आप लेखन पहुंच प्रदान नहीं कर सकते हैं।

यदि प्रोग्राम पहली बार फ़ाइल खोला गया है तो वॉल्यूम छाया प्रतिलिपि (VSS) का समर्थन करता है, तो आप फ़ाइल तक पहुंच प्राप्त करने के लिए VSS का भी उपयोग कर सकते हैं।

ऐसे वाणिज्यिक सॉफ़्टवेयर ड्राइवर हैं जो आपको उपयोग में आने पर भी ऐसी फ़ाइलों तक पहुंचने की अनुमति देते हैं। आप सेंट-बर्नार्ड द्वारा ओपन फाइल मैनेजर प्राप्त करने में सक्षम होते थे, और आप विजनवर्क्स सॉल्यूशंस इंक द्वारा File Access Manager (FAM) का भी उपयोग कर सकते हैं। ये ड्राइवर आमतौर पर बैकअप सॉफ्टवेयर कंपनियों के लिए उनके उत्पादों में शामिल करने के लिए OEM हैं।

वीएसएस प्रोग्राम को बताकर काम करता है कि फ़ाइल पहले से ही खोली गई है कि एक और प्रोग्राम फ़ाइल से पढ़ना चाहेगा। VSS तब फ़ाइल की एक प्रति करता है और आपको इस प्रतिलिपि से पढ़ने देता है। वीएसएस विरासत अनुप्रयोगों के लिए काम नहीं करता है।

एफएएम पारदर्शी और गैर-विरासत कार्यक्रमों के लिए पारदर्शी रूप से काम करता है जो विशेष रूप से खुली और लॉक की गई फ़ाइलों तक पहुंचने वाले अनुप्रयोगों की 'अनुमत सूची' निर्दिष्ट करके समान रूप से काम करता है। इस सूची में केवल कार्यक्रमों को इन फ़ाइलों तक पहुंच की अनुमति है। जब कोई फ़ाइल खोला जा रहा है, तो यह कैश मोड में जाता है ताकि आप फ़ाइल की प्रति प्राप्त कर सकें क्योंकि फ़ाइल की 'बैकअप/ओपन' शुरू हुई थी। इस बिंदु पर मूल रूप से फ़ाइल खोलने वाला प्रोग्राम फ़ाइल को वास्तव में देखता है, और अनुमत सूची में दूसरा प्रोग्राम फ़ाइल को देखता है, जब फ़ाइल का 'खुला/बैकअप' होता था। यह फ़ाइल की स्थिरता सुनिश्चित करता है।

2

नीचे दिए गए कोड को आजमाएं।

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
fileStream = new StreamReader(fileStr); 

मैंने इसे विंडोज एक्सपी पर आजमाया है। अगर फ़ाइल किसी अन्य प्रक्रिया & द्वारा लिखित मोड में पहले से ही खुली है, तो उसने साझाकरण अधिकार निर्दिष्ट नहीं किए हैं, फिर भी आप फ़ाइल को रीड मोड में खोलने में सक्षम होंगे।

अस्वीकरण: यह काम करता है, लेकिन फिर, मुझे यकीन नहीं है कि आपको इसे उत्पादन कोड में उपयोग करना चाहिए या नहीं। मैं अभी तक कोई औपचारिक दस्तावेज नहीं ढूंढ पा रहा हूं जो कहता है कि इसे काम करना चाहिए।

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