2011-05-17 12 views
12

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

using (FileStream stream = new FileStream("path", FileMode.Open)) 

धन्यवाद!

+0

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

उत्तर

27

आपको एक और निर्माता का प्रयास करना चाहिए। वे एमएसडीएन में दस्तावेज हैं।

यह एक एक शर्त की तरह दिखता है:

FileStream Constructor (String, FileMode, FileAccess, FileShare) 

MSDN Link

FileAccess

एक निरंतर तय करता है कि फ़ाइल FileStream वस्तु द्वारा पहुँचा जा सकता। यह FileStream ऑब्जेक्ट के CanRead और CanWrite गुण प्राप्त करता है। यदि पथ डिस्क फ़ाइल निर्दिष्ट करता है तो CanSeek सत्य है।

fileshare

एक निरंतर तय करता है कि फ़ाइल प्रक्रियाओं के द्वारा साझा किया जाएगा।

+0

Awsome उत्तर! धन्यवाद! –

6
using (FileStream stream = new FileStream("path", FileMode.Open)) 

कि fileshare तर्क, FileShare.Read के लिए डिफ़ॉल्ट मान का उपयोग करेगा। कौन सा से किसी भी प्रक्रिया को फ़ाइल से लिखने से इनकार करता है। यदि फ़ाइल में कोई अन्य प्रक्रिया लिख ​​रही है तो यह काम नहीं कर सकता है, आप पहले से प्राप्त किए गए अधिकार से इनकार नहीं कर सकते हैं।

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

-1

आप फ़ाइल को अनलॉक कर सकते हैं और इसके बाद फ़ाइल पढ़ सकते हैं। बस Sysinternals से Handle.exe का उपयोग करें, या कमांड लाइन विकल्पों के साथ अनलॉकर का उपयोग करें। वे दोनों फ़ाइल अनलॉक कर सकते हैं, और आप अपने प्रोग्राम को छोड़कर आसानी से अपने प्रोग्राम से निष्पादित कर सकते हैं, । (लेकिन विंडोज एसएएम फ़ाइल के लिए उनका उपयोग न करें, यह एसएएम के साथ काम नहीं करता है;)) शुभकामनाएँ!

0

मैंने निम्नलिखित कामों का उपयोग किया है, हालांकि सावधानी के साथ उपयोग करना चाहिए क्योंकि फाइल को संशोधित किया जा सकता है जबकि आप इसे किसी अन्य प्रक्रिया द्वारा खोलते हैं।

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite); 
संबंधित मुद्दे