2009-07-26 16 views
6

क्या सभी फ़ाइलों को हटाने के लिए कोई तरीका है & निर्दिष्ट निर्देशिका की उप-निर्देशिका उन पर पुन: प्रयास किए बिना?निर्देशिका खाली करने का सबसे अच्छा तरीका क्या है?

गैर सुरुचिपूर्ण समाधान:

public static void EmptyDirectory(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     // Delete all files 
     foreach (var file in Directory.GetFiles(path)) 
     { 
      File.Delete(file); 
     } 

     // Delete all folders 
     foreach (var directory in Directory.GetDirectories(path)) 
     { 
      Directory.Delete(directory, true); 
     } 
    } 
} 
+0

http://social.msdn.microsoft.com/Forums/vstudio/en-US/2239b45a-3f19-4a2a-b5cd-050b3ee32b9d/how-can-i-check-folder-is-empty-or-not मंच = csharpgeneral –

उत्तर

10

System.IO.Directory.Delete के बारे में कैसे? इसमें एक रिकर्सन विकल्प है, आप इसका उपयोग भी कर रहे हैं। अपने कोड की समीक्षा करना ऐसा लगता है कि आप कुछ अलग करने की कोशिश कर रहे हैं - इसे हटाए बिना निर्देशिका खाली करें, है ना? ठीक है, आप इसे किसी भी मामले में हटा सकते हैं और यह फिर से बनाने :)


, आप (या कुछ विधि आप का उपयोग करें) पर फ़ाइलें और उप निर्देशिकाओं के सभी पुनरावृति करना होगा। हालांकि, अगर आप एक ही समय में दोनों फ़ाइलों और निर्देशिकाओं से अधिक पुनरावृति कर सकते हैं, GetFileSystemInfos का उपयोग कर:

foreach(System.IO.FileSystemInfo fsi in 
    new System.IO.DirectoryInfo(path).GetFileSystemInfos()) 
{ 
    if (fsi is System.IO.DirectoryInfo) 
     ((System.IO.DirectoryInfo)fsi).Delete(true); 
    else 
     fsi.Delete(); 
} 
+0

यह एक अच्छा समाधान है, लेकिन मुझे नहीं लगता कि यह मूल कोड से अधिक सुरुचिपूर्ण कैसे है। मुझे समझ में नहीं आता कि समस्या क्या है। –

+0

यह एसीएल और टाइमस्टैम्प जैसे सभी मेटाडाटा को छोड़ देगा। यह किसी दिए गए उपयोग के मामले के लिए स्वीकार्य हो सकता है या नहीं भी हो सकता है – jpaugh

+0

@jpaugh निर्देशिकाओं को हटाने और पुन: निर्माण करने से ऐसा होगा, लेकिन यह समाधान यह नहीं करता है। हटाई गई फ़ाइलों को छोड़कर कोई एसीएल या टाइमस्टैम्प खो जाएगा, जो निश्चित रूप से उन फ़ाइलों से संबंधित सभी जानकारी खोने जा रहे हैं, अगर फ़ाइल स्थायी रूप से समाप्त हो जाती है तो मैं कुछ और उम्मीद करने की कल्पना नहीं कर सकता। – BlueMonkMN

3

क्यों कि सुरुचिपूर्ण नहीं है? यह साफ, बहुत पठनीय है और नौकरी करता है।

2

ठीक है, तुम हमेशा सिर्फ Directory.Delete इस्तेमाल कर सकते हैं ....

http://msdn.microsoft.com/en-us/library/aa328748%28VS.71%29.aspx

या यदि आप फैंसी प्राप्त करना चाहते हैं, निर्देशिका को हटाने के लिए WMI का उपयोग करें।

+0

यदि मैं अपनी पोस्ट को सही तरीके से समझता हूं, तो वह निर्देशिका को हटाना नहीं चाहता, बस इसमें फाइलें और उप-निर्देशिकाएं। –

+1

ये, सच है, लेकिन निर्देशिका। डेले अभी भी सबसे अच्छा तरीका है। निर्देशिका को हटाने और अपने स्थान पर एक खाली एक को फिर से बनाने के लिए अधिक "सुरुचिपूर्ण" और संभवतः पुनरावृत्ति से तेज़ है। – TheSmurf

+0

वह दृष्टिकोण किसी भी गैर-विरासत निर्देशिका अनुमतियों को बनाए रखेगा। – Craig

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