निर्देशिका में सभी फ़ाइलों और फ़ोल्डरों को कैसे हटाएं?


662

C # का उपयोग करते हुए, मैं एक निर्देशिका से सभी फ़ाइलों और फ़ोल्डरों को कैसे हटा सकता हूं, लेकिन फिर भी रूट निर्देशिका को बनाए रख सकता हूं?


11
अगर DirectoryInfo के पास एक तरीका है ।Clean ();
जेएल

6
या .DeleteFolders, और DeleteFiles विधियाँ।
जेएल

18
आप इस बात से अवगत होना चाहते हैं कि यदि फ़ाइल लॉक है (या यदि आपके पास अधिकार नहीं हैं) तो आपके डिलीट बहुत आसानी से एक अपवाद फेंक सकते हैं। अपवादों की सूची के लिए FileInfo.Delete देखें।
शेन कोर्ट्रेल

जवाबों:


831
System.IO.DirectoryInfo di = new DirectoryInfo("YourPath");

foreach (FileInfo file in di.GetFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
    dir.Delete(true); 
}

यदि आपकी निर्देशिका में कई फाइलें हो सकती हैं, EnumerateFiles()तो तुलना में अधिक कुशल है GetFiles(), क्योंकि जब आप उपयोग करते हैं, तो आप EnumerateFiles()पूरे संग्रह को वापस करने से पहले इसे एन्यूमरेट करना शुरू कर सकते हैं, GetFiles()जहां आपको इसे फिर से एन्यूमरेट करने से पहले पूरे संग्रह को मेमोरी में लोड करने की आवश्यकता होती है। इस उद्धरण को यहाँ देखें :

इसलिए, जब आप कई फ़ाइलों और निर्देशिकाओं के साथ काम कर रहे हैं, तो EnumerateFiles () अधिक कुशल हो सकते हैं।

एक ही लागू होता है EnumerateDirectories()और GetDirectories()। तो कोड होगा:

foreach (FileInfo file in di.EnumerateFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
    dir.Delete(true); 
}

इस सवाल के उद्देश्य के लिए, वास्तव में उपयोग करने का कोई कारण नहीं है GetFiles()और GetDirectories()


6
क्या है stackoverflow.com/questions/12415105/… "जब आप Directory.Delete को कॉल करते हैं और एक फाइल इस तरह से खुली होती है, Directory.Delete सभी फाइलों को हटाने में सफल होती है, लेकिन जब Directory.Delete कॉल को डिलीट करता है" डायरेक्ट्री खाली नहीं होती है " अपवाद को फेंक दिया गया है क्योंकि हटाने के लिए एक फ़ाइल चिह्नित है लेकिन वास्तव में हटाए नहीं गए। "
किकेनेट

74
DirectoryInfo धीमा है क्योंकि यह बहुत अधिक अन्य डेटा एकत्र करता है। बीटीडब्ल्यू: Directory.Delete(path, true)सभी का ध्यान
रखेगा

57
@AcidJunkie, यह प्रश्न में निर्देशिका को भी हटा देगा, जबकि ओपी विशेष रूप से रूट निर्देशिका को रखने के लिए कहता है।
मार्क एल

5
ध्यान दें कि यह काम नहीं करेगा यदि कोई भी फाइल केवल पढ़ने के लिए है। आपको कॉल करने से पहले केवल-पढ़ने के लिए ध्वज को निकालने की आवश्यकता है file.Delete()
बेन

8
यदि उप-निर्देशिकाओं में फ़ाइलें हैं तो यह काम नहीं करता है।
cdiggins

174

हां, ऐसा करने का सही तरीका है। यदि आप अपने आप को "क्लीन" देना चाहते हैं (या, जैसा कि मैं इसे "एम्प्टी" फ़ंक्शन कहना चाहूंगा), आप एक एक्सटेंशन विधि बना सकते हैं।

public static void Empty(this System.IO.DirectoryInfo directory)
{
    foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete();
    foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
}

यह आपको तब कुछ करने की अनुमति देगा ..

System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\...");

directory.Empty();

4
अंतिम पंक्ति को डायरेक्टरी के बजाय उपडायरेक्टरी.टेलीट (सही) होना चाहिए। डीटेट (सत्य)। मैंने कोड को केवल काट दिया और चिपकाया और इसने मुख्य निर्देशिका को ही हटा दिया। कोड के लिए धन्यवाद यह बहुत अच्छा है!
ऐन्सिली

26
ध्यान दें कि EmptyC # में पहले से मौजूद है, के लिए string। अगर मैंने कुछ और देखा तो मुझे Emptyआश्चर्य होगा कि अगर उसने वस्तु (या फाइलसिस्टम) को संशोधित किया, तो मुझे यह बताने के बजाय boolकि यह खाली है या नहीं। उसके कारण, मैं नाम के साथ जाऊंगा Clean
डिफॉल्ट

5
@Default: मैं इस तथ्य को नहीं समझता हूं कि एक प्रकार की संपत्ति पहले से ही किसी अन्य (पूरी तरह से असंबंधित) प्रकार पर कोई असर होना चाहिए; और गुणों और कार्यों के लिए सम्मेलन जो शब्दों के लिए राज्य का संकेत देते हैं जो क्रिया भी हो सकते हैं, उन्हें Is(यानी के IsEmptyबजाय Empty) के साथ उपसर्ग करना है ।
एडम रॉबिन्सन

3
@AdamRobinson बस इसका नोट बनाना चाहता था। करने के लिए मुझे , क्या माइक्रोसॉफ्ट अपने कोड में है कुछ असर नहीं करते। लेकिन यह हर किसी की व्याख्या करने के लिए है :)
डिफ़ॉल्ट

4
@simonhaines: प्रश्न का बिंदु निर्देशिका को खाली करना था (अर्थात इसके अंदर की हर चीज़ को हटाना), न कि निर्देशिका को स्वयं हटाना।
एडम रॉबिन्सन

77

निम्न कोड पुनरावर्ती रूप से फ़ोल्डर को साफ़ करेगा:

private void clearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach(FileInfo fi in dir.GetFiles())
    {
        fi.Delete();
    }

    foreach (DirectoryInfo di in dir.GetDirectories())
    {
        clearFolder(di.FullName);
        di.Delete();
    }
}

मेरे लिए काम किया, जबकि Directory.Delete (पथ, सच); यह कहते हुए कि फ़ोल्डर में गड़बड़ी नहीं है
जैक ग्रिफिन

40
 new System.IO.DirectoryInfo(@"C:\Temp").Delete(true);

 //Or

 System.IO.Directory.Delete(@"C:\Temp", true);

1
दूसरा विकल्प, Directory.Delete (स्ट्रिंग, बुलियन) ने मेरे लिए काम किया।
स्टीफन मैकडॉगल

15
यह रूट डायरेक्टरी को हटा देता है, जहां ओपी ने विशेष रूप से पूछा था कि इसे बरकरार रखा जाए।
मार्क एल

2
Deleteअगर निर्देशिका मौजूद नहीं है तो इसे फेंक देंगे, इसलिए Directory.Existsपहले चेक करना सुरक्षित होगा ।
जेम्स

1
@ नाम Directory.Existsही काफी नहीं है; जाँच के बाद, किसी अन्य थ्रेड का नाम बदलकर या निर्देशिका निकाल दी गई हो सकती है। यह सुरक्षित है try-catch
andre_ss6

2
@Marv केवल जोड़ने के साथ सावधान Directory.Createक्योंकि पुनरावर्ती Directory.Deleteदुर्भाग्य से तुल्यकालिक होने की गारंटी नहीं है ..
एंड्रयू हैनॉन

38

हम LINQ के लिए प्यार भी दिखा सकते हैं :

using System.IO;
using System.Linq;

var directory = Directory.GetParent(TestContext.TestDir);

directory.EnumerateFiles()
    .ToList().ForEach(f => f.Delete());

directory.EnumerateDirectories()
    .ToList().ForEach(d => d.Delete(true));

ध्यान दें कि यहां मेरा समाधान निष्पादन योग्य नहीं है, क्योंकि मैं उपयोग कर रहा हूं Get*().ToList().ForEach(...)जो IEnumerableदो बार समान उत्पन्न करता है । मैं इस समस्या से बचने के लिए एक एक्सटेंशन विधि का उपयोग करता हूं:

using System.IO;
using System.Linq;

var directory = Directory.GetParent(TestContext.TestDir);

directory.EnumerateFiles()
    .ForEachInEnumerable(f => f.Delete());

directory.EnumerateDirectories()
    .ForEachInEnumerable(d => d.Delete(true));

यह विस्तार विधि है:

/// <summary>
/// Extensions for <see cref="System.Collections.Generic.IEnumerable"/>.
/// </summary>
public static class IEnumerableOfTExtensions
{
    /// <summary>
    /// Performs the <see cref="System.Action"/>
    /// on each item in the enumerable object.
    /// </summary>
    /// <typeparam name="TEnumerable">The type of the enumerable.</typeparam>
    /// <param name="enumerable">The enumerable.</param>
    /// <param name="action">The action.</param>
    /// <remarks>
    /// “I am philosophically opposed to providing such a method, for two reasons.
    /// …The first reason is that doing so violates the functional programming principles
    /// that all the other sequence operators are based upon. Clearly the sole purpose of a call
    /// to this method is to cause side effects.”
    /// —Eric Lippert, “foreach” vs “ForEach” [http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx]
    /// </remarks>
    public static void ForEachInEnumerable<TEnumerable>(this IEnumerable<TEnumerable> enumerable, Action<TEnumerable> action)
    {
        foreach (var item in enumerable)
        {
            action(item);
        }
    }
}

1
और अगर आप उपनिर्देशिका को भी हटाने की कोशिश कर रहे हैं, तो foreach (var dir in info.GetDirectories("*", SearchOption.AllDirectories).OrderByDescending(dir => dir.FullName.Length)) dir.Delete();उपयोग की जा सकती है।
वार्टी

1
आप प्रदर्शन पसंद है, उपयोग करने पर विचार directory.EnumerateFiles()और directory.EnumerateDirectories()बजाय directory.Get*()तरीकों।
टीनिस्टर

1
मजेदार, मेरे अपने IEnumerable<T>.ForEach()एक्सटेंशन का सारांश XML टिप्पणी है, "उल्लंघन! उल्लंघन! खुला!"।
मार्क एल।

अरे दूसरा कारण क्या है? द 3? आदि।?
बिल रॉबर्ट्स

lol @RASX - वह आपसे बात कर रहा है: "यदि आप इन दार्शनिक आपत्तियों से सहमत नहीं हैं और इस पैटर्न में व्यावहारिक मूल्य पाते हैं, तो हर तरह से, आगे बढ़ें और इस तुच्छ वन-लाइनर को स्वयं लिखें।"
बिल रॉबर्ट्स

37

सबसे सरल तरीका:

Directory.Delete(path,true);  
Directory.CreateDirectory(path);

ध्यान रखें कि यह फ़ोल्डर पर कुछ अनुमतियों को मिटा सकता है।


9
ध्यान रखें कि यह किसी भी विशेष अनुमतियों को हटा देगा जो पथ का था
मैथ्यू लॉक

6
आपको उन दो क्रियाओं के बीच टाइमआउट जोड़ना होगा। इस कोड को चलाने का प्रयास करें और आपको अपवाद मिलेगा: जबकि (सत्य) {Directory.Delete (@ "C: \ Myfolder", true); Directory.CreateDirectory (@ "C: \ MyFolder"); }
RcMan

31
private void ClearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach(FileInfo fi in dir.GetFiles())
    {
        try
        {
            fi.Delete();
        }
        catch(Exception) { } // Ignore all exceptions
    }

    foreach(DirectoryInfo di in dir.GetDirectories())
    {
        ClearFolder(di.FullName);
        try
        {
            di.Delete();
        }
        catch(Exception) { } // Ignore all exceptions
    }
}

यदि आप जानते हैं कि कोई उप-फ़ोल्डर नहीं हैं, तो ऐसा कुछ सबसे आसान हो सकता है:

    Directory.GetFiles(folderName).ForEach(File.Delete)

मैंने इस फ़ंक्शन का उपयोग सिस्टम अस्थायी फ़ोल्डर को साफ़ करने के लिए किया है। मैंने केवल सभी अपवादों को अनदेखा करने के लिए Delete () और IsReadOnly के आसपास ट्राइ-कैच को जोड़ा और यह काम कर गया।
हम्बड्स

@ हमम्बड्स, क्या आप इस उत्तर को अपडेट कर सकते हैं, या यहां कोड डाल सकते हैं, और मैं आपके परिवर्तनों के साथ अपडेट करूंगा?
ज़ुमलाइफगार्ड

13
System.IO.Directory.Delete(installPath, true);
System.IO.Directory.CreateDirectory(installPath);

3
जैसा कि ऊपर: ध्यान रखें कि यह किसी भी विशेष अनुमति को हटा देगा जो पथ के पास थी।
hB0

8

हर विधि जो मैंने कोशिश की, वे System.IO त्रुटियों के साथ कुछ बिंदु पर विफल रहे हैं। निम्न विधि सुनिश्चित करने के लिए काम करती है, भले ही फ़ोल्डर खाली हो या नहीं, केवल-पढ़ने या नहीं, आदि।

ProcessStartInfo Info = new ProcessStartInfo();  
Info.Arguments = "/C rd /s /q \"C:\\MyFolder"";  
Info.WindowStyle = ProcessWindowStyle.Hidden;  
Info.CreateNoWindow = true;  
Info.FileName = "cmd.exe";  
Process.Start(Info); 

1
मैं हमेशा rd / s / q + mkdir पसंद करता हूं जब यह निर्देशिका खाली करने की बात आती है।
दाविद ओहिया

7
यह क्रॉस-प्लेटफॉर्म समाधान नहीं है। यूनिक्स जैसी प्रणालियों में स्पष्ट रूप से cmd.exe नहीं है, वे भी .exe फ़ाइलें नहीं चलाते हैं। C # केवल Windows नहीं है, इसमें मोनो भी है, जो क्रॉस-प्लेटफॉर्म है।
प्रदर्शन नाम

1
@SargeBorsch में प्रश्न में क्रॉस प्लेटफॉर्म की आवश्यकता नहीं थी और C # होने के नाते यह सबसे अधिक संभावना है कि समाधान का उपयोग विंडोज के लिए किया जाएगा। यह एकमात्र ऐसा उत्तर प्रतीत होता है जो .NET फ़ंक्शन का उपयोग नहीं करता है, इसलिए यह एक विकल्प के रूप में बहुत मूल्यवान है।
एलेक्स पंडरी

7

यहाँ वह उपकरण है जिसे मैंने सभी पोस्टों को पढ़ने के बाद समाप्त किया। ऐसा होता है

  • हटाए जा सकने वाले सभी हटाए गए
  • कुछ फ़ाइलें फ़ोल्डर में रहती हैं, तो गलत देता है

के साथ लेनदेन करता है

  • फ़ाइलों को पढ़ें
  • विलम्ब देरी
  • बंद फाइलें

यह Directory.Delete का उपयोग नहीं करता है क्योंकि प्रक्रिया अपवाद पर निरस्त है।

    /// <summary>
    /// Attempt to empty the folder. Return false if it fails (locked files...).
    /// </summary>
    /// <param name="pathName"></param>
    /// <returns>true on success</returns>
    public static bool EmptyFolder(string pathName)
    {
        bool errors = false;
        DirectoryInfo dir = new DirectoryInfo(pathName);

        foreach (FileInfo fi in dir.EnumerateFiles())
        {
            try
            {
                fi.IsReadOnly = false;
                fi.Delete();

                //Wait for the item to disapear (avoid 'dir not empty' error).
                while (fi.Exists)
                {
                    System.Threading.Thread.Sleep(10);
                    fi.Refresh();
                }
            }
            catch (IOException e)
            {
                Debug.WriteLine(e.Message);
                errors = true;
            }
        }

        foreach (DirectoryInfo di in dir.EnumerateDirectories())
        {
            try
            {
                EmptyFolder(di.FullName);
                di.Delete();

                //Wait for the item to disapear (avoid 'dir not empty' error).
                while (di.Exists)
                {
                    System.Threading.Thread.Sleep(10);
                    di.Refresh();
                }
            }
            catch (IOException e)
            {
                Debug.WriteLine(e.Message);
                errors = true;
            }
        }

        return !errors;
    }

6

निम्न कोड निर्देशिका को साफ करेगा, लेकिन रूट निर्देशिका को वहां छोड़ दें (पुनरावर्ती)।

Action<string> DelPath = null;
DelPath = p =>
{
    Directory.EnumerateFiles(p).ToList().ForEach(File.Delete);
    Directory.EnumerateDirectories(p).ToList().ForEach(DelPath);
    Directory.EnumerateDirectories(p).ToList().ForEach(Directory.Delete);
};
DelPath(path);

6

मैंनें इस्तेमाल किया

Directory.GetFiles(picturePath).ToList().ForEach(File.Delete);

पुरानी तस्वीर को हटाने के लिए और मुझे इस फ़ोल्डर में किसी भी ऑब्जेक्ट की आवश्यकता नहीं है


1
सुनिश्चित नहीं हैं कि आप .ToList जरूरत है ()
बेन पावर

5

FileInfo और DirectoryInfo के बजाय केवल फ़ाइल और निर्देशिका के साथ स्थिर तरीकों का उपयोग करना तेजी से प्रदर्शन करेगा। (कम से स्वीकार किए जाते हैं जवाब देखने के क्या फ़ाइल और FileInfo सी # में बीच का अंतर है? )। उत्तर उपयोगिता विधि के रूप में दिखाया गया है।

public static void Empty(string directory)
{
    foreach(string fileToDelete in System.IO.Directory.GetFiles(directory))
    {
        System.IO.File.Delete(fileToDelete);
    }
    foreach(string subDirectoryToDeleteToDelete in System.IO.Directory.GetDirectories(directory))
    {
        System.IO.Directory.Delete(subDirectoryToDeleteToDelete, true);
    }
}

5
private void ClearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach (FileInfo fi in dir.GetFiles())
    {
        fi.IsReadOnly = false;
        fi.Delete();
    }

    foreach (DirectoryInfo di in dir.GetDirectories())
    {
        ClearFolder(di.FullName);
        di.Delete();
    }
}

3
string directoryPath = "C:\Temp";
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);

Mscorlib.dll में 'System.IO.IOException' प्रकार का एक अपवाद उत्पन्न हुआ, लेकिन उपयोगकर्ता कोड में संभाला नहीं गया था अतिरिक्त जानकारी: निर्देशिका खाली नहीं है।
किपसोएप

3

विंडोज 7 में, अगर आपने इसे विंडोज एक्सप्लोरर के साथ मैन्युअल रूप से बनाया है, तो निर्देशिका संरचना इस के समान है:

C:
  \AAA
    \BBB
      \CCC
        \DDD

और निर्देशिका C: \ AAA को साफ़ करने के लिए मूल प्रश्न में सुझाए गए कोड को चलाने पर, di.Delete(true)BBB को हटाने का प्रयास करते समय लाइन हमेशा IOException "निर्देशिका खाली नहीं होती है" के साथ विफल हो जाती है। यह शायद विंडोज एक्सप्लोरर में किसी प्रकार की देरी / कैशिंग के कारण है।

निम्नलिखित कोड मेरे लिए मज़बूती से काम करता है:

static void Main(string[] args)
{
    DirectoryInfo di = new DirectoryInfo(@"c:\aaa");
    CleanDirectory(di);
}

private static void CleanDirectory(DirectoryInfo di)
{
    if (di == null)
        return;

    foreach (FileSystemInfo fsEntry in di.GetFileSystemInfos())
    {
        CleanDirectory(fsEntry as DirectoryInfo);
        fsEntry.Delete();
    }
    WaitForDirectoryToBecomeEmpty(di);
}

private static void WaitForDirectoryToBecomeEmpty(DirectoryInfo di)
{
    for (int i = 0; i < 5; i++)
    {
        if (di.GetFileSystemInfos().Length == 0)
            return;
        Console.WriteLine(di.FullName + i);
        Thread.Sleep(50 * i);
    }
}

क्या है stackoverflow.com/questions/12415105/… "जब आप Directory.Delete को कॉल करते हैं और एक फाइल इस तरह से खुली होती है, Directory.Delete सभी फाइलों को हटाने में सफल होती है, लेकिन जब Directory.Delete कॉल को डिलीट करता है" डायरेक्ट्री खाली नहीं होती है " अपवाद को फेंक दिया गया है क्योंकि हटाने के लिए एक फ़ाइल चिह्नित है लेकिन वास्तव में हटाए नहीं गए। "
किकेनेट

@Kiquenet: लगता है जैसे हमें विंडोज में एक मुद्दा मिला। विंडोज विलोपन के लिए चिह्नित फाइलों की सूची से परामर्श कर सकता था और यदि निर्देशिका में सभी फाइलें हटाने के लिए चिह्नित हैं, तो यह मत कहो कि निर्देशिका खाली नहीं है। वैसे भी मेरा WaitForDirectoryToBecomeEmpty () एक वर्कअराउंड है।
दूरगामी

2

यह संस्करण पुनरावर्ती कॉल का उपयोग नहीं करता है, और रीडोनली समस्या को हल करता है।

public static void EmptyDirectory(string directory)
{
    // First delete all the files, making sure they are not readonly
    var stackA = new Stack<DirectoryInfo>();
    stackA.Push(new DirectoryInfo(directory));

    var stackB = new Stack<DirectoryInfo>();
    while (stackA.Any())
    {
        var dir = stackA.Pop();
        foreach (var file in dir.GetFiles())
        {
            file.IsReadOnly = false;
            file.Delete();
        }
        foreach (var subDir in dir.GetDirectories())
        {
            stackA.Push(subDir);
            stackB.Push(subDir);
        }
    }

    // Then delete the sub directories depth first
    while (stackB.Any())
    {
        stackB.Pop().Delete();
    }
}

1

DirectoryInfo का उपयोग करें GetDirectories विधि।

foreach (DirectoryInfo subDir in new DirectoryInfo(targetDir).GetDirectories())
                    subDir.Delete(true);

1

निम्न उदाहरण दिखाता है कि आप ऐसा कैसे कर सकते हैं। यह पहले कुछ निर्देशिकाओं और एक फ़ाइल बनाता है और फिर उन्हें इसके माध्यम से निकालता है Directory.Delete(topPath, true);:

    static void Main(string[] args)
    {
        string topPath = @"C:\NewDirectory";
        string subPath = @"C:\NewDirectory\NewSubDirectory";

        try
        {
            Directory.CreateDirectory(subPath);

            using (StreamWriter writer = File.CreateText(subPath + @"\example.txt"))
            {
                writer.WriteLine("content added");
            }

            Directory.Delete(topPath, true);

            bool directoryExists = Directory.Exists(topPath);

            Console.WriteLine("top-level directory exists: " + directoryExists);
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.Message);
        }
    }

यह https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx से लिया गया है ।


1

उपरोक्त समस्या से निपटने का यह सबसे अच्छा तरीका नहीं है। लेकिन यह एक विकल्प है ...

while (Directory.GetDirectories(dirpath).Length > 0)
 {
       //Delete all files in directory
       while (Directory.GetFiles(Directory.GetDirectories(dirpath)[0]).Length > 0)
       {
            File.Delete(Directory.GetFiles(dirpath)[0]);
       }
       Directory.Delete(Directory.GetDirectories(dirpath)[0]);
 }

0
DirectoryInfo Folder = new DirectoryInfo(Server.MapPath(path)); 
if (Folder .Exists)
{
    foreach (FileInfo fl in Folder .GetFiles())
    {
        fl.Delete();
    }

    Folder .Delete();
}

क्या आप अधिक विशिष्ट हो सकते हैं और बता सकते हैं कि यह कैसे और क्यों काम करना चाहिए?
डीप फ्रोजन

3
केवल कोड वाले उत्तर उपयुक्त नहीं हैं। आपको यह बताना चाहिए कि यह कैसे और क्यों काम करना चाहिए / समस्या को हल करना चाहिए।
रदुरंद

0

यह दिखाएगा कि हम फ़ोल्डर को कैसे हटाते हैं और इसकी जांच करते हैं कि हम टेक्स्ट बॉक्स का उपयोग करते हैं

using System.IO;
namespace delete_the_folder
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Deletebt_Click(object sender, EventArgs e)
    {
        //the  first you should write the folder place
        if (Pathfolder.Text=="")
        {
            MessageBox.Show("ples write the path of the folder");
            Pathfolder.Select();
            //return;
        }

        FileAttributes attr = File.GetAttributes(@Pathfolder.Text);

        if (attr.HasFlag(FileAttributes.Directory))
            MessageBox.Show("Its a directory");
        else
            MessageBox.Show("Its a file");

        string path = Pathfolder.Text;
        FileInfo myfileinf = new FileInfo(path);
        myfileinf.Delete();

    }


}

}

0
using System.IO;

string[] filePaths = Directory.GetFiles(@"c:\MyDir\");

foreach (string filePath in filePaths)

File.Delete(filePath);

0

मुख्य से बुलाओ

static void Main(string[] args)
{ 
   string Filepathe =<Your path>
   DeleteDirectory(System.IO.Directory.GetParent(Filepathe).FullName);              
}

इस विधि को जोड़ें

public static void DeleteDirectory(string path)
{
    if (Directory.Exists(path))
    {
        //Delete all files from the Directory
        foreach (string file in Directory.GetFiles(path))
        {
            File.Delete(file);
        }
        //Delete all child Directories
        foreach (string directory in Directory.GetDirectories(path))
        {
             DeleteDirectory(directory);
        }
        //Delete a Directory
        Directory.Delete(path);
    }
 }

0
 foreach (string file in System.IO.Directory.GetFiles(path))
 {
    System.IO.File.Delete(file);
 }

 foreach (string subDirectory in System.IO.Directory.GetDirectories(path))
 {
     System.IO.Directory.Delete(subDirectory,true); 
 } 

0

फ़ोल्डर को हटाने के लिए, यह टेक्स्ट बॉक्स और एक बटन का उपयोग करके कोड है using System.IO;:

private void Deletebt_Click(object sender, EventArgs e)
{
    System.IO.DirectoryInfo myDirInfo = new DirectoryInfo(@"" + delete.Text);

    foreach (FileInfo file in myDirInfo.GetFiles())
    {
       file.Delete();
    }
    foreach (DirectoryInfo dir in myDirInfo.GetDirectories())
    {
       dir.Delete(true);
    }
}

-2
private void ClearDirectory(string path)
{
    if (Directory.Exists(path))//if folder exists
    {
        Directory.Delete(path, true);//recursive delete (all subdirs, files)
    }
    Directory.CreateDirectory(path);//creates empty directory
}

2
नीचे देखें ... "हटाना और फिर से बनाना" केवल रखने के समान नहीं है, सभी एसीएल अनुकूलन खो जाएंगे।
मार्क एल

मैं बहुत कुछ इसी तरह की कोशिश की है क्योंकि मैं और ACL अनुकूलन के बारे में परवाह नहीं है और फ़ोल्डर में मुद्दों के बाद भाग नहीं बनाया जा रहा हैDirectory.CreateDirectory
JG में SD

-3

केवल एक चीज आपको क्या करना चाहिए स्थापित करने के लिए है optional recursive parameterकरने के लिए True

Directory.Delete("C:\MyDummyDirectory", True)

.NET का शुक्रिया। :)


3
यह निर्देशिका को भी हटाता है।
रजत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.