मैं किसी फ़ाइल की सामग्री को कैसे साफ़ कर सकता हूँ?


80

मुझे हर बार एप्लिकेशन शुरू होने पर किसी विशेष फ़ाइल की सामग्री को साफ़ करने की आवश्यकता होती है। मैं यह कैसे करुं?

जवाबों:


131

आप File.WriteAllText विधि का उपयोग कर सकते हैं ।

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);

मेरे पास एक फ़ाइल हार्डलिंक है, और उपयोग File.WriteAllText, ऐसा लगता है जैसे कि यह कभी-कभी (?) फ़ाइल को हटा देता है क्योंकि हार्डलिंक को अपडेट नहीं रखा गया है।
Ciantic

1
मैं आपको सलाह देता हूं कि ऐसा न करें कि यदि इस ऑपरेशन के ठीक बाद कोई अन्य फ़ाइल फ़ाइल तक पहुंच जाएगी। मुझे इस मुद्दे का सामना करना पड़ा जहां कोड की इस लाइन के बाद फ़ाइल को बंद लिखना नहीं मिला, और कारण IO exceptions of file is in use, इसलिए मैं आपको फ़ाइल स्ट्रीम के माध्यम से इसे मैन्युअल रूप से संभालने की सलाह देता हूं
deadManN

84

यह वही है जो मैंने एक नई फ़ाइल बनाए बिना फ़ाइल की सामग्री को साफ़ करने के लिए किया था क्योंकि मैं नहीं चाहता था कि फ़ाइल सृजन के नए समय को प्रदर्शित करे, जब अनुप्रयोग ने केवल अपनी सामग्री को अपडेट किया हो।

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.

मैंने .NET 3.5 का उपयोग किया है, बस अगर आप संस्करण जानना चाहते हैं।
अभय जैन

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

5
+1 यह फ़ाइल लॉक हासिल करने, सुरक्षित रूप से फ़ाइल विशेषताओं की जाँच करने और अंत में सामग्री को साफ़ करने का एकमात्र तरीका है।
mafu

1
यह वही है जो मुझे खुद की आवश्यकता थी ... मुझे उपयोगकर्ता को सरल लाइन-बाय-लाइन संदेशों के लिए एक एप्लिकेशन को सेवा संवाद करने की आवश्यकता है, और इससे मुझे अपनी फ़ाइल लॉक रखने और सेवा ऐप को रोकने के लिए संदेश साफ़ करने की अनुमति मिलती है मैसेज डालने या अनजाने में मैसेज भेजने या डुप्लिकेट करने से।
phillk6751

2
यह एक प्रयोग ब्लॉक में filestream बनाने के लिए उचित नहीं होगा? यह स्वचालित रूप से धारा को भी बंद कर देगा।
वूलेनेंज

12

FileMode.Truncateफ़ाइल बनाते समय हर बार उपयोग करें । इसके अलावा File.Createएक अंदर रखें try catch


2

ऐसा करने का सबसे सरल तरीका शायद आपके एप्लिकेशन के माध्यम से फ़ाइल को हटाना और एक ही नाम के साथ एक नया बनाना है ... यहां तक ​​कि सरल तरीके से बस अपने आवेदन को एक नई फ़ाइल के साथ अधिलेखित कर दें।


1
यदि आप हटाने के तुरंत बाद फ़ाइल बनाने का प्रयास करते हैं तो समस्याएँ हो सकती हैं। कभी-कभी OS फ़ाइल बनाने में विफल रहता है क्योंकि यह "सोचता है" फ़ाइल अभी भी मौजूद है।
दिमित्री लोबानोव

@ डमित्री लोबानोव - [मुझे पता है कि यह एक पुराना धागा है]। मैं स्वीकार नहीं करता कि ऑपरेटिंग सिस्टम कभी-कभी सोचता है कि कोई फ़ाइल अभी भी मौजूद है, जब तक कि कोई अच्छा कारण न हो। यदि यह किया जाता है तो यह बहुत खराब ओएस होगा। बहुत अधिक संभावना है कि कुछ अभी भी मौजूदा फ़ाइल पर एक हैंडल खुला है। यदि आप फाइलों को बंद करने में सावधानी नहीं बरतते हैं (तो निस्तारण सुनिश्चित करने के लिए उदाहरण के लिए 'प्रयोग' करके) यह आपका अपना सॉफ्टवेयर भी हो सकता है। एंटी-वायरस भी हो सकता है। हालांकि अपने निष्कर्ष से सहमत हूं। मुझे लगता है कि FileMode.Truncate जाने का रास्ता है।
स्टीव किड

2

सबसे आसान तरीका है:

File.WriteAllText(path, string.Empty)

हालांकि, मैं आपको उपयोग करने की सलाह देता हूं FileStreamक्योंकि पहला समाधान फेंक सकता हैUnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}

1

कुछ का उपयोग करके देखें

फ़ाइल

निर्दिष्ट पथ में किसी फ़ाइल को बनाता या अधिलेखित करता है।


पूछे गए प्रश्न के लिए एक अच्छा विचार नहीं है: फ़ाइल में पहले से मौजूद डेटा को नहीं हटाता है - यह केवल नए डेटा की लंबाई को अधिलेखित करता है, इसलिए यदि पुराना डेटा> नया डेटा आप दोनों के मिश्रण के साथ समाप्त हो जाएगा।
namford
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.