2011-01-13 16 views
45

मैं एक फ़ाइल बनाने के लिए System.IO.File.Create का उपयोग कर रहा हूं। मैं इसे स्ट्रीम लेखक के साथ लिख नहीं रहा हूं, बस इसे बना रहा हूं।System.IO.File.Create फ़ाइल को लॉक करना

मुझे अगली छोर में सर्वर त्रुटि मिलती है जब एप्लिकेशन नई बनाई गई फ़ाइल को खोलने का प्रयास करता है - कि फ़ाइल उपयोग में है। कचरा संग्रह तब आ रहा है और कुछ मिनट बाद सब ठीक है।

अब मुझे पता है कि मैं Streamwriter का उपयोग कर रहा था, मुझे इसे बंद करना होगा। क्या यह बनाने के लिए लागू होता है?

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

+0

चलो अपने कोड – Kev

उत्तर

64

File.Create रिटर्न एक FileStream। आप इसे इस तरह का उपयोग करना चाहिए:

using (FileStream fs = File.Create(path)) 
{ 
    //you can use the filstream here to put stuff in the file if you want to 
} 
+1

देख मैंने कभी कि कभी नहीं की उम्मीद होगा। – Traubenfuchs

11

फ़ाइल बनाई जा रही यह करने के लिए एक FileStream खोलता है, इसलिए, यह ताला लगा (File.Create रिटर्न FileStream)।

फ़ाइल को एक्सेस करने के लिए आपको यह स्ट्रीम बंद करनी होगी। यह सबसे अच्छा एक using बयान के साथ किया जाता है:

using(FileStream fs = File.Create(path)) 
{ 
} 
1

Create विधि एक फ़ाइल हैंडल वापस आ जाएगी। फाइल का पुन: उपयोग करने से पहले फ़ाइल हैंडल बंद होना चाहिए। कृपया एमएसडीएन आलेख File.Create Method (String) में विवरण देखें।

सारांश:

FileStream इस विधि के द्वारा बनाई गई वस्तु कोई नहीं का एक डिफ़ॉल्ट fileshare मूल्य है; कोई अन्य प्रक्रिया या कोड मूल फ़ाइल हैंडल बंद होने तक बनाई गई फ़ाइल तक पहुंच सकता है।

8

जब File.Create का उपयोग कर आप एक FileStream लौटे मिलता है। जब तक आप या तो स्ट्रीम बंद नहीं करते हैं या FileStream ऑब्जेक्ट का निपटारा नहीं किया जाता है (कचरा कलेक्टर के फाइनलजर द्वारा) यह खुला और बंद रहता है।

FileStream लागू करता IDisposable तो आप निम्न कर सकते हैं:

using(FileStream fs = File.Create(filename)) 
{ 
    // Do stuff like write to the file 
} 

using बयान "वाक्यात्मक चीनी" है और संकलक कोड है कि करने के लिए कार्यात्मक रूप से बराबर है उत्पन्न करने के लिए कारण बनता है:

FileStream fs = File.Create(filename) 
try 
{ 
    // Do stuff like write to the file 
} 
finally 
{ 
    fs.Dispose(); 
} 

Dispose विधि आंतरिक रूप से Close कॉल करती है।

1

मैं उपयोग कर रहा था: System.IO.File.Create(sFullFileName);

ऊपर .Create विधि फ़ाइल को बंद करने नहीं था

मैं अब का उपयोग करें: System.IO.File.WriteAllText(sFullFileName, "Uploading");

इस विधि बनाता है और फ़ाइल बंद कर देता है (ध्यान दें: मैं एक डाल फ़ाइल में "अपलोडिंग" स्ट्रिंग, लेकिन मुझे यकीन है कि string.Empty भी काम करेगा।

80

इस प्रयास करें:

System.IO.File.Create(FullFName).Close(); 
+1

यह तब सही है जब आप केवल एक खाली फ़ाइल बनाना चाहते हैं। – TTT

+1

यह इतना सच है! "मैं इसे स्ट्रीम लेखक के साथ लिख नहीं रहा हूं, बस इसे बना रहा हूं"। –

+0

यही वह था जो मैं भी ढूंढ रहा था। एक खाली फ़ाइल के साथ एक आकर्षण काम करता है। धन्यवाद। –

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