2008-11-05 35 views
66

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

मैंने देखा कि कुछ प्रोजेक्ट फ़ोल्डरों को उनके जीवन से अधिक लंबा रास्ता तय करना था, इसलिए मैंने जांच शुरू कर दी। विशेष रूप से, ऐसा लगता है कि मैंने जिन परियोजनाओं में एसवीएन का उपयोग किया था, उनके लिए फ़ोल्डर्स चारों ओर चिपके हुए थे। यह पता चला है कि .svn निर्देशिका में केवल-पढ़ने वाली फ़ाइलों को हटाया नहीं जा रहा है। मैंने केवल पढ़ने-योग्य फ़ाइल पर एक साधारण परीक्षण किया और पाया कि System.IO.File.Delete और System.IO.FileInfo.Delete केवल-पढ़ने वाली फ़ाइल को नहीं हटाएगा।

मुझे इस विशेष निर्देशिका में फ़ाइलों की सुरक्षा करने की परवाह नहीं है; अगर वहां कुछ महत्वपूर्ण है तो यह गलत जगह पर है। क्या कोई .NET क्लास है जो केवल-पढ़ने वाली फ़ाइलों को हटा सकती है, या क्या मुझे केवल-पढ़ने योग्य विशेषताओं की जांच करनी होगी और उन्हें पट्टी करनी होगी?

+2

मैं स्वीकार किए जाते हैं उत्तर बदल क्योंकि गुलजार की टिम स्टीवर्ट की तुलना में कोड नमूना अधिक विस्तृत है। उसे पहले स्थान पर चुना जाना चाहिए था लेकिन किसी कारण से मुझे टिम बेहतर पसंद आया। लोग अजीब चीजें हैं! ब्रह्मांड में चीजों को थोड़ा और सही बनाने के लिए समय निकालने के लिए – OwenP

+4

+1। अगर केवल मेरे डेवलपर्स वापस जाएंगे और अपने मामूली अपराधों को सही करेंगे, तो हम रेमेडियल प्रोग्रामिंग कक्षाओं को रद्द कर पाएंगे! –

उत्तर

133

टिम जवाब देने के लिए कुछ नमूना कोड जोड़ना:

using System.IO; 

File.SetAttributes(filePath, FileAttributes.Normal); 
File.Delete(filePath); 
+0

आपको सही होने के लिए एक उत्थान मिलता है, लेकिन आपका जवाब टिम स्टीवर्ट के बाद आया था, जिसने वही बात कहा था। – OwenP

+3

ठीक है। टिम इसके लायक है। सोचा कि कुछ कोड मदद करेगा। –

+0

कुछ मामलों में आपको केवल पढ़ने के ध्वज को साफ़ करने या हटाने से पहले फ़ाइल का स्वामित्व लेने की आवश्यकता हो सकती है। विवरण के लिए http://stackoverflow.com/questions/12999272/ देखें। –

2

आपको जांच करने की आवश्यकता क्यों है? केवल जबरन केवल पढ़ने के ध्वज को साफ़ करें और फ़ाइल को हटा दें।

1

हम्म, मुझे लगता है कि मैं नहीं बल्कि एक sheduled कार्य में डाल दिया था

>del /F * 

। शायद लॉगिंग आंकड़ों के लिए एक बैच फ़ाइल द्वारा लपेटा।

क्या मुझे कुछ याद आ रही है?

+0

हां। जब वह विशेष आयु का होता है तो वह एक फ़ाइल को मिटाना चाहता है। हर अवधि में सभी फाइलें नहीं। –

+0

वह सभी फ़ाइलों को हटाना नहीं चाहता, बस कुछ निश्चित समय की तुलना में पुरानी सभी फाइलें। –

46

File.Delete's documentation, के अनुसार, आपको केवल-पढ़ने योग्य विशेषता को पट्टी करना होगा। आप File.SetAttributes() का उपयोग कर फ़ाइल के गुण सेट कर सकते हैं।

+0

मैंने इसे पहले होने के लिए स्वीकार किया। – OwenP

+29

यह पहले होने के बारे में नहीं है। – VVS

16

बराबर अगर तुम हो एक FileInfo वस्तु के साथ काम करने के लिए है:

file.IsReadOnly = false; 
file.Delete(); 
संबंधित मुद्दे