दिलचस्प पोस्ट
इकाई फ़्रेमवर्क के साथ मैन्युअल रूप से कुंजी दर्ज करना तत्व आईडी के साथ जेएस फंक्शन नाम का विरोध क्यों होता है? सास अमान्य सीएसएस त्रुटि: "अपेक्षित अभिव्यक्ति" JSG के साथ webjars.org से Font Awesome का उपयोग कैसे करें PHP में, मैं कैसे जांचूं कि फ़ंक्शन मौजूद है या नहीं? जीसीसी के साथ सी प्रोग्राम के प्रवेश बिंदु को कैसे बदल सकता है? घातक त्रुटि: Python.h: ऐसा कोई फ़ाइल या निर्देशिका नहीं मैं जावास्क्रिप्ट में 2 फ़ंक्शन की तुलना कैसे करूं? सिस्टम टेबल मास्टर का उद्देश्य क्या है … spt_values ​​और उसके मूल्यों के अर्थ क्या हैं? GeoCoder.getFromLocation को कॉल करते समय सेवा उपलब्ध नहीं है Php में सीएसवी फ़ाइल से बड़े डेटा पढ़ें asio async_write को बढ़ावा दें: कैसे async_write कॉल interleaving नहीं? सिग्नल स्ट्रेंथ का उपयोग करते हुए वाईफ़ाई राउटर से दूरी की गणना कैसे करें? NSDate ऑब्जेक्ट से यूटीसी समय और स्थानीय समय प्राप्त करें जावा से विंडोज नामित पाइप कैसे खोलें?

किसी अन्य प्रक्रिया द्वारा उपयोग की जाने वाली एक फ़ाइल को पढ़ना

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

समस्या यह है कि मैं फ़ाइल पर Streamreader उपयोग नहीं कर सकता क्योंकि इसका used by another process जा रहा used by another process ReadWrite साथ एक Filestream सेट करना कोई अच्छा काम नहीं करेगा क्योंकि मैं फ़ाइल का उपयोग कर रहा है उस प्रक्रिया को नियंत्रित नहीं कर सकता

मैं नोटपैड में फ़ाइल खोल सकता हूँ सर्वर इसका उपयोग कर रहा है, भले ही इसे एक्सेस करना संभव हो।

क्या इस के चारों ओर एक अच्छा तरीका है?

क्या मुझे निम्नलिखित करना चाहिए?

  1. फ़ाइल की निगरानी करें
  2. जब इसे बदलता है तो उसे एक अस्थायी प्रतिलिपि बनाएँ
  3. अस्थायी प्रतिलिपि पढ़ें
  4. अस्थायी कॉपी हटाएं

जब भी सर्वर इसे बदलता है, तब मुझे फ़ाइल में टेक्स्ट प्राप्त करना होगा

वेब के समाधान से एकत्रित समाधान "किसी अन्य प्रक्रिया द्वारा उपयोग की जाने वाली एक फ़ाइल को पढ़ना"

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

आपको इस तरह StreamReader बनाने की आवश्यकता होगी:

 using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var sr = new StreamReader(fs, Encoding.Default)) { // read the stream //... } 

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

कॉल

 File.Open(path, FileMode.Read, FileAccess.Read, FileShare.ReadWrite) 

यह तब तक काम करना चाहिए जब तक कि अन्य एप्लिकेशन ने फ़ाइल को विशेष रूप से लॉक नहीं किया हो।