Jak usunąć wszystkie pliki i foldery z katalogu?

662

Używając C #, jak mogę usunąć wszystkie pliki i foldery z katalogu, ale nadal zachować katalog główny?

J L.
źródło
11
Co byłoby fajne, gdyby DirectoryInfo miał metodę taką jak .Clean ();
JL.
6
lub .DeleteFolders i DeleteFiles metody.
JL.
18
Chcesz mieć świadomość, że Twoje Usunięcia mogą bardzo łatwo wyrzucić wyjątek, jeśli plik jest zablokowany (lub jeśli nie masz uprawnień). Zobacz FileInfo.Delete, aby uzyskać listę wyjątków.
Shane Courtrille,

Odpowiedzi:

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); 
}

Jeśli Twój katalog może zawierać wiele plików, EnumerateFiles()jest bardziej wydajny niż GetFiles(), ponieważ gdy go używasz EnumerateFiles(), możesz zacząć go wyliczać przed zwróceniem całej kolekcji, w przeciwieństwie do GetFiles()miejsca, w którym musisz załadować całą kolekcję do pamięci, zanim zaczniesz ją wyliczać. Zobacz ten cytat tutaj :

Dlatego podczas pracy z wieloma plikami i katalogami funkcja EnumerateFiles () może być bardziej wydajna.

To samo dotyczy EnumerateDirectories()i GetDirectories(). Więc kod będzie:

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

Na potrzeby tego pytania naprawdę nie ma powodu, aby używać GetFiles()i GetDirectories().

gsharp
źródło
6
O co chodzi w stackoverflow.com/questions/12415105/... „Gdy wywołasz Directory.Delete i plik zostanie otwarty w taki sposób, Directory.Delete z powodzeniem usuwa wszystkie pliki, ale gdy Directory.Delete wywołuje RemoveDirectory„ katalog nie jest pusty ” wyjątek został zgłoszony, ponieważ plik został oznaczony do usunięcia, ale nie został faktycznie usunięty. ”
Kiquenet,
74
DirectoryInfo jest powolny, ponieważ gromadzi znacznie więcej innych danych. BTW: Directory.Delete(path, true)zajmie się wszystkim :)
AcidJunkie
57
@AcidJunkie, spowoduje to również usunięcie danego katalogu, podczas gdy OP konkretnie prosi o zachowanie katalogu głównego.
Marc L.
5
Pamiętaj, że to nie zadziała, jeśli którykolwiek z plików jest tylko do odczytu. Przed wywołaniem musisz usunąć flagę „tylko do odczytu” file.Delete().
Ben
8
Wydaje się, że to nie działa, jeśli podkatalogi zawierają pliki.
cdiggins,
174

Tak, to właściwy sposób na zrobienie tego. Jeśli chcesz nadać sobie funkcję „Wyczyść” (lub, jak wolę to nazwać, funkcję „Opróżnij”), możesz utworzyć metodę rozszerzenia.

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);
}

Umożliwi to zrobienie czegoś takiego jak ...

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

directory.Empty();
Adam Robinson
źródło
4
Ostatni wiersz powinien być subDirectory.Delete (true) zamiast directory.Delete (true). Właśnie wyciąłem i wkleiłem kod, który usunął sam katalog główny. Dzięki za kod, jest świetny!
Aximili
26
zauważ, że Emptyistnieje już w C # dla string. Gdybym zobaczył coś innego o nazwie Empty, byłbym zaskoczony, gdyby zmodyfikował obiekt (lub system plików) zamiast dać mi informację bool, czy jest pusty, czy nie. Z tego powodu wybrałbym to imię Clean.
Domyślnie
5
@ Domyślny: Nie sądzę, że fakt, że jeden typ ma już właściwość, powinien mieć jakikolwiek wpływ na to, czy inny (całkowicie niezwiązany) typ powinien ją mieć; a konwencją dla właściwości i funkcji wskazujących stan słów, które mogą być również czasownikami, jest ich przedrostek Is(tzn. IsEmptyzamiast Empty).
Adam Robinson
3
@AdamRobinson Chciałem to zanotować. Dla mnie to, co Microsoft ma w swoim kodzie, ma pewien wpływ. Ale każdy powinien to interpretować :)
Domyślnie
4
@simonhaines: Chodziło o to, aby opróżnić katalog (tzn. usunąć wszystko w nim ), a nie sam katalog.
Adam Robinson
77

Poniższy kod wyczyści folder rekurencyjnie:

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();
    }
}
hiteshbiblog
źródło
Pracował dla mnie, podczas gdy Directory.Delete (ścieżka, prawda); wrzucił narzekając, że folder nie był nieprzenikniony
Jack Griffin
40
 new System.IO.DirectoryInfo(@"C:\Temp").Delete(true);

 //Or

 System.IO.Directory.Delete(@"C:\Temp", true);
Thulasiram
źródło
1
Druga opcja, Directory.Delete (String, Boolean) działała dla mnie.
Stephen MacDougall,
15
Spowoduje to usunięcie katalogu głównego, w którym OP konkretnie poprosił o jego zachowanie.
Marc L.
2
Deletewyrzuci, jeśli katalog nie istnieje, więc bezpieczniej byłoby Directory.Existsnajpierw sprawdzić.
James
1
@James Directory.Existsto za mało; po sprawdzeniu inny wątek mógł zmienić nazwę katalogu lub go usunąć. Jest to bezpieczniejsze try-catch.
andre_ss6
2
@Marv Ostrożnie, po prostu dodając a, Directory.Createponieważ rekursywne Directory.Deleteniestety nie gwarantuje synchronizacji ..
Andrew Hanlon
38

Możemy również okazać miłość do 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));

Zauważ, że moje rozwiązanie tutaj nie jest wydajne, ponieważ używam, Get*().ToList().ForEach(...)który generuje to samo IEnumerabledwa razy. Używam metody rozszerzenia, aby uniknąć tego problemu:

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));

To jest metoda rozszerzenia:

/// <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);
        }
    }
}
rasx
źródło
1
A jeśli próbujesz również usunąć podkatalogi, foreach (var dir in info.GetDirectories("*", SearchOption.AllDirectories).OrderByDescending(dir => dir.FullName.Length)) dir.Delete();może być przydatne.
Warty
1
Jeśli podoba Ci się wydajność, rozważ użycie directory.EnumerateFiles()i directory.EnumerateDirectories()zamiast directory.Get*()metod.
Tinister
1
Zabawne, moje własne IEnumerable<T>.ForEach()rozszerzenie ma podsumowujący komentarz XML: „Naruszenie! Naruszenie! Nieczyste!”.
Marc L.
Hej, jaki jest drugi powód? Trzeci? Itp.?
Bill Roberts
lol @RASX - mówi do ciebie: „Jeśli nie zgadzasz się z tymi filozoficznymi obiekcjami i nie znajdziesz praktycznej wartości w tym wzorze, to napewno napisz i wypisz ten trywialny linijka”.
Bill Roberts,
37

Najprostszy sposób:

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

Pamiętaj, że może to spowodować utratę niektórych uprawnień do folderu.

Igor Muchaczew
źródło
9
pamiętaj, że spowoduje to usunięcie wszelkich specjalnych uprawnień na ścieżce
Matthew Lock
6
Musisz dodać limit czasu między tymi dwoma akcjami. spróbuj uruchomić ten kod, a otrzymasz wyjątek: while (true) {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
    }
}

Jeśli wiesz, że nie ma podfolderów, coś takiego może być najłatwiejsze:

    Directory.GetFiles(folderName).ForEach(File.Delete)
zumalifeguard
źródło
Użyłem tej funkcji do wyczyszczenia folderu temp systemu. Właśnie dodałem try-catch wokół Delete () i IsReadOnly, aby zignorować wszystkie wyjątki, i zadziałało.
humbads
@humbads, czy możesz zaktualizować tę odpowiedź lub wstawić kod tutaj, a ja zaktualizuję Twoje zmiany?
zumalifeguard
13
System.IO.Directory.Delete(installPath, true);
System.IO.Directory.CreateDirectory(installPath);
MacGyver
źródło
3
tak samo jak powyżej: pamiętaj, że spowoduje to usunięcie specjalnych uprawnień na ścieżce.
hB0
8

Każda metoda, którą wypróbowałem, w pewnym momencie zawiodła z błędami System.IO. Poniższa metoda działa na pewno, nawet jeśli folder jest pusty, czy nie, tylko do odczytu lub nie, itp.

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); 
Alexandru Dicu
źródło
1
Zawsze wolę rd / s / q + mkdir, jeśli chodzi o opróżnianie katalogów.
Dawid Ohia
7
To nie jest rozwiązanie wieloplatformowe. Systemy uniksowe wyraźnie nie mają cmd.exe, nawet nie uruchamiają plików .exe. C # to nie tylko Windows, jest też Mono, który jest wieloplatformowy.
Nazwa wyświetlana
1
@SargeBorsch w pytaniu nie było wymagań dotyczących wielu platform, a ponieważ jest to język C #, najprawdopodobniej rozwiązanie będzie używane w systemie Windows. Wydaje się, że jest to jedyna odpowiedź, która nie korzysta z funkcji .NET, więc jest bardzo cenna jako alternatywa.
Alex Pandrea,
7

Oto narzędzie, na którym skończyłem po przeczytaniu wszystkich postów. To robi

  • Usuwa wszystko, co można usunąć
  • Zwraca false, jeśli niektóre pliki pozostają w folderze

Zajmuje się

  • Pliki tylko do odczytu
  • Opóźnienie usunięcia
  • Zablokowane pliki

Nie korzysta z Directory.Delete, ponieważ proces jest przerywany na zasadzie wyjątku.

    /// <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;
    }
Eric Bole-Feysot
źródło
6

Poniższy kod wyczyści katalog, ale pozostawi tam katalog główny (rekurencyjny).

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);
hofi
źródło
6

użyłem

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

do usunięcia starego obrazu i nie potrzebuję żadnego obiektu w tym folderze

Mohammad Farahani
źródło
1
Nie jestem pewien, czy potrzebujesz .ToList ()
Ben Power
5

Używanie tylko statycznych metod z File i Directory zamiast FileInfo i DirectoryInfo będzie działać szybciej. (patrz zaakceptowana odpowiedź na stronie Jaka jest różnica między File i FileInfo w C #? ). Odpowiedź wyświetlana jako metoda użyteczności.

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);
    }
}
Kriil
źródło
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();
    }
}
Mong Zhu
źródło
3
string directoryPath = "C:\Temp";
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);
AVH
źródło
Wystąpił wyjątek typu „System.IO.IOException” w pliku mscorlib.dll, ale nie został obsłużony w kodzie użytkownika. Informacje dodatkowe: Katalog nie jest pusty.
kipusoep
3

W Windows 7, jeśli właśnie utworzyłeś go ręcznie za pomocą Eksploratora Windows, struktura katalogów jest podobna do tej:

C:
  \AAA
    \BBB
      \CCC
        \DDD

I uruchomienie kodu sugerowanego w pierwotnym pytaniu, aby wyczyścić katalog C: \ AAA, wiersz di.Delete(true) zawsze kończy się niepowodzeniem z wyjątkiem IOException „Katalog nie jest pusty” podczas próby usunięcia BBB. Jest to prawdopodobnie spowodowane pewnym opóźnieniem / buforowaniem w Eksploratorze Windows.

Poniższy kod działa dla mnie niezawodnie:

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);
    }
}
farfareast
źródło
O co chodzi w stackoverflow.com/questions/12415105/... „Gdy wywołasz Directory.Delete i plik zostanie otwarty w taki sposób, Directory.Delete z powodzeniem usuwa wszystkie pliki, ale gdy Directory.Delete wywołuje RemoveDirectory„ katalog nie jest pusty ” wyjątek został zgłoszony, ponieważ plik został oznaczony do usunięcia, ale nie został faktycznie usunięty. ”
Kiquenet
@Kiquenet: Wygląda na to, że znaleźliśmy problem w systemie Windows. System Windows mógł przejrzeć listę plików przeznaczonych do usunięcia, a jeśli wszystkie pliki w katalogu są oznaczone do usunięcia, nie mów, że katalog nie jest pusty. W każdym razie moja WaitForDirectoryToBecomeEmpty () jest obejściem.
farfareast
2

Ta wersja nie wykorzystuje wywołań rekurencyjnych i rozwiązuje problem tylko do odczytu.

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();
    }
}
Jeppe Andreasen
źródło
1

użyj metody GetDirectories dla DirectoryInfo.

foreach (DirectoryInfo subDir in new DirectoryInfo(targetDir).GetDirectories())
                    subDir.Delete(true);
Mr_Hmp
źródło
1

Poniższy przykład pokazuje, jak to zrobić. Najpierw tworzy katalogi i plik, a następnie usuwa je poprzez 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);
        }
    }

Został pobrany z https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx .

Salma Tofaily
źródło
1

To nie jest najlepszy sposób na rozwiązanie powyższego problemu. Ale to jest alternatywa ...

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]);
 }
dsmyrnaios
źródło
0
DirectoryInfo Folder = new DirectoryInfo(Server.MapPath(path)); 
if (Folder .Exists)
{
    foreach (FileInfo fl in Folder .GetFiles())
    {
        fl.Delete();
    }

    Folder .Delete();
}
Ashok Luhach
źródło
Czy mógłbyś być bardziej szczegółowy i wyjaśnić, jak i dlaczego to powinno działać?
Deep Frozen
3
Odpowiedzi zawierające tylko kod nie są odpowiednie. Powinieneś wyjaśnić, jak i dlaczego powinno to działać / rozwiązać problem.
rdurand
0

pokaże to, w jaki sposób usuwamy folder i sprawdzamy, czy korzystamy z pola tekstowego

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();

    }


}

}
Abdelrhman Khalil
źródło
0
using System.IO;

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

foreach (string filePath in filePaths)

File.Delete(filePath);
SynsMasTer
źródło
0

Zadzwoń z głównego

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

Dodaj tę metodę

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);
    }
 }
sansalk
źródło
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); 
 } 
Manish Y
źródło
0

Aby usunąć folder, jest to kod za pomocą pola tekstowego i przycisku 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);
    }
}
Abdelrhman Khalil
źródło
-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
}
dadziu
źródło
2
Zobacz poniżej ... „usuwanie i odtwarzanie” to nie to samo, co przechowywanie, wszystkie dostosowania ACL zostaną utracone.
Marc L.
Próbowałem czegoś bardzo podobnego do tego, ponieważ nie dbałem o dostosowania ACL i napotkałem problemy z tym, że folder nie został utworzony późniejDirectory.CreateDirectory
JG w SD
-3

Jedyną rzeczą, jaką należy zrobić, to ustawić optional recursive parametersię True.

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

Dzięki .NET. :)

LysanderM
źródło
3
Spowoduje to również usunięcie samego katalogu.
rajat
-4
IO.Directory.Delete(HttpContext.Current.Server.MapPath(path), True)

Nie potrzebujesz więcej

Mustafa Odeh
źródło
2
Źle ... spowoduje to również usunięcie katalogu głównego.
L-Four