2013-02-08 8 views
5

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

if (!File.Exists(filePath + fileName)) 
    File.Create(filePath + fileName); 
StreamWriter sr = new StreamWriter(filePath + fileName,false); 

इस त्रुटि से कैसे निपटें?

प्रक्रिया 'c: \ blahblah' फ़ाइल तक नहीं पहुंच सकती है क्योंकि इसका उपयोग किसी अन्य प्रक्रिया द्वारा किया जा रहा है।

उत्तर

14

File.Create खोलता है एक FileStream (http://msdn.microsoft.com/en-us/library/d62kzs03.aspx)।

जैसा कि आपने इसे निपटान नहीं किया है, फ़ाइल लॉक हो गई है और फ़ाइल के बाद की पहुंच इस स्थिति की वजह से विफल हो जाएगी यदि इन्हें अन्य हैंडल से किया जाता है (यानी अन्य FileStream या पूरे StreamWriter)।

इस कोड को दर्शाता है कि कैसे आप FileStream तरह IDisposable वस्तुओं के साथ काम करना चाहिए:

if (!File.Exists(filePath + fileName)) 
{ 
    File.Create(filePath + fileName).Dispose(); 

    using(StreamWriter sr = new StreamWriter(filePath + fileName,false)) 
    { 

    } 
} 
+2

फ़ाइल के साथ परेशान क्यों करें। फिर तैयार करें? बस स्ट्रीमवाइटर के निर्माता को फ़ाइल के पथ को पास करें और उस अतिरिक्त ऑब्जेक्ट को बनाने से बचें जिसका आप उपयोग नहीं करते हैं। –

+0

@ChrisDunaway हाँ, बिल्कुल, लेकिन मैं जवाब दे रहा था "दूसरा भाग फ़ाइल तक क्यों नहीं पहुंच सकता है?"। तुम्हे पता हैं। –

3

क्यों न सिर्फ StreamWriter निर्माता है कि फ़ाइल के नाम में ले जाता है का उपयोग करें?

StreamWriter sr = new StreamWriter(filePath + fileName); 

MSDN से:

पथ पैरामीटर फ़ाइल का नाम हो सकता है, एक यूनिवर्सल नेमिंग कन्वेंशन (UNC) शेयर पर एक फ़ाइल भी शामिल है। यदि फ़ाइल मौजूद है, तो यह अधिलेखित है; अन्यथा, एक नई फाइल बनाई गई है।

बहुत मामूली बात है, लेकिन आप जब फ़ाइल नाम और फ़ोल्डर पथ श्रृंखलाबद्ध Path.Combine उपयोग करने पर विचार कर सकता है।

+0

क्या मुझे इसे पहले बनाना है और सुनिश्चित करना है कि यह अस्तित्व में है या नहीं? –

+0

क्या आपने उद्धरण पढ़ा था? 'अगर फ़ाइल मौजूद है, तो यह अधिलेखित है; अन्यथा, ** एक नई फ़ाइल बनाई गई है **। –

2

एकल विधि का उपयोग कर बना सकते हैं और एक फ़ाइल खोलने के द्वारा अपने कोड को सरल बनाएँ:

using (FileStream fs = File.OpenWrite(path)) 
{ 
    Byte[] info = new UTF8Encoding(true) 
         .GetBytes("This is to test the OpenWrite method."); 

    fs.Write(info, 0, info.Length); 
} 

MSDN: (File.OpenWrite Method)

किसी मौजूदा फ़ाइल को खोलता है या लिखने के लिए एक नया फ़ाइल बनाता है।

+0

इसमें अधिक अपवर्त होना चाहिए। – Rob

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