2009-11-10 13 views
10

मैं FileStream और BinaryWriter के साथ एक बाइनरी फ़ाइल लिखने का तरीका जानने का प्रयास कर रहा हूं, और जब मैं लिख रहा हूं, तो फ़ाइल को पढ़ने के लिए लॉक रखें। मैं विशेष रूप से अन्य अनुप्रयोगों/प्रक्रियाओं को तब तक नहीं पढ़ना चाहता हूं जब इसे लिखा जा रहा हो।फ़ाइलस्ट्रीम के माध्यम से इसे लिखते समय मैं फ़ाइल को कैसे लॉक कर सकता हूं?

//code to declare ba as a byte array 

//dpath is the path to the file 

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, FileAccess.Write); 

BinaryWriter Writer = new BinaryWriter(BinaryFile); 

Writer.Write(ba); 

Writer.Close(); 

BinaryFile.Dispose(); 

अब समस्या यह है कि फ़ाइल के दौरान अन्य अनुप्रयोगों द्वारा फ़ाइल खोला जा सकता है, जो कि मेरे वर्तमान एप्लिकेशन में अवांछनीय है। FileStream में लॉक विधि है, लेकिन यह लिखने के लिए ताले और पढ़ने के लिए नहीं है, जिससे मेरी मदद नहीं होती है।

उत्तर

23

आप fourth parameter of the FileStream Constructor खोज रहे हैं।

public FileStream(
    string path, 
    FileMode mode, 
    FileAccess access, 
    FileShare share 
) 
तो अपने मामले में

:

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, 
             FileAccess.Write, FileShare.None); 

FileShare -Enum:

अन्य FileStream वस्तुओं एक ही फाइल को हो सकता है पहुँच की तरह नियंत्रित करने के लिए स्थिरांक होता है।

सदस्य:

  • कोई नहीं, वर्तमान फ़ाइल के बंटवारे गिरावट आती है। फ़ाइल को खोलने के लिए कोई भी अनुरोध (इस प्रक्रिया या किसी अन्य प्रक्रिया द्वारा) फ़ाइल बंद होने तक विफल हो जाएगी।
  • पढ़ें, पढ़ने के लिए फ़ाइल के बाद के उद्घाटन की अनुमति देता है। यदि यह ध्वज निर्दिष्ट नहीं है, तो फ़ाइल को बंद करने तक फ़ाइल को खोलने के लिए कोई अनुरोध (इस प्रक्रिया या किसी अन्य प्रक्रिया द्वारा) विफल हो जाएगा। हालांकि, भले ही यह ध्वज निर्दिष्ट किया गया हो, फिर भी फ़ाइल तक पहुंचने के लिए अतिरिक्त अनुमतियों की आवश्यकता हो सकती है।
  • लिखें, लिखने के लिए फ़ाइल के बाद के उद्घाटन की अनुमति देता है। यदि यह ध्वज निर्दिष्ट नहीं है, तो फ़ाइल को बंद होने तक फ़ाइल खोलने के लिए फ़ाइल खोलने का कोई अनुरोध (इस प्रक्रिया या किसी अन्य प्रक्रिया द्वारा) विफल हो जाएगा। हालांकि, भले ही यह ध्वज निर्दिष्ट किया गया हो, फिर भी फ़ाइल तक पहुंचने के लिए अतिरिक्त अनुमतियों की आवश्यकता हो सकती है।
  • ReadWrite, पढ़ने या लिखने के लिए फ़ाइल के बाद के उद्घाटन की अनुमति देता है। यदि यह ध्वज निर्दिष्ट नहीं है, तो फ़ाइल को बंद करने या लिखने के लिए फ़ाइल खोलने का कोई अनुरोध (इस प्रक्रिया या किसी अन्य प्रक्रिया द्वारा) फ़ाइल बंद होने तक विफल हो जाएगी। हालांकि, भले ही यह ध्वज निर्दिष्ट किया गया हो, फिर भी फ़ाइल तक पहुंचने के लिए अतिरिक्त अनुमतियों की आवश्यकता हो सकती है।
  • हटाएं, बाद में फ़ाइल को हटाने की अनुमति देता है।
  • इनहेरिएबल, फ़ाइल प्रक्रियाओं द्वारा विरासत योग्य फ़ाइल संभालता है। यह Win32 द्वारा सीधे समर्थित नहीं है।
-1

मुझे नहीं पता कि यह संभव है या नहीं।

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

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