C # usuń folder oraz wszystkie pliki i foldery w tym folderze

104

Próbuję usunąć folder oraz wszystkie pliki i foldery w tym folderze, używam poniższego kodu i otrzymuję błąd Folder is not empty, jakieś sugestie dotyczące tego, co mogę zrobić?

try
{
  var dir = new DirectoryInfo(@FolderPath);
  dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
  dir.Delete();
  dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);
}
catch (IOException ex)
{
  MessageBox.Show(ex.Message);
}
Jamie
źródło

Odpowiedzi:

167
dir.Delete(true); // true => recursive delete
Tommy Carlier
źródło
111

Przeczytaj instrukcję:

Metoda Directory.Delete (ciąg znaków, wartość logiczna)

Directory.Delete(folderPath, true);
Morfildur
źródło
68
Po co czytać instrukcję, skoro znacznie szybciej można ją znaleźć w Google i trafić tutaj?
reggaeguitar
5
To takie prawdziwe
Corvin
4
Rzeczywiście ... właśnie to wygooglowałem, a ten post był pierwszym wynikiem z google.
MasterN8
2
Czasami zadaję pytanie, a potem sam na nie odpowiadam, by pomóc przyszłym pracownikom Google. StackOverflow umożliwia jednoczesne publikowanie pytania i odpowiedzi.
DharmaTurtle
1
Zacząłem w ten sposób robić całą lokalną dokumentację. Niezupełnie FAQ, bardziej jak pytania SO. tj. Jak to zrobić? lub co to jest?
Paul Duer
23

Próbować:

System.IO.Directory.Delete(path,true)

Spowoduje to rekurencyjne usunięcie wszystkich plików i folderów znajdujących się pod „ścieżką”, zakładając, że masz do tego uprawnienia.

jinsungy
źródło
6

Eee, a co z dzwonieniem Directory.Delete(path, true);?

Dmitri Nesteruk
źródło
5

Metoda Directory.Delete ma rekurencyjny parametr boolowski, powinna robić to, czego potrzebujesz

Paolo Tedesco
źródło
3

Spróbuj tego.

namespace EraseJunkFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo yourRootDir = new DirectoryInfo(@"C:\somedirectory\");
            foreach (DirectoryInfo dir in yourRootDir.GetDirectories())
                    DeleteDirectory(dir.FullName, true);
        }
        public static void DeleteDirectory(string directoryName, bool checkDirectiryExist)
        {
            if (Directory.Exists(directoryName))
                Directory.Delete(directoryName, true);
            else if (checkDirectiryExist)
                throw new SystemException("Directory you want to delete is not exist");
        }
    }
}
Rosidin Bima
źródło
0
public void Empty(System.IO.DirectoryInfo directory)
{
    try
    {
        logger.DebugFormat("Empty directory {0}", directory.FullName);
        foreach (System.IO.FileInfo file in directory.GetFiles()) file.Delete();
        foreach (System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
    }
    catch (Exception ex)
    {
        ex.Data.Add("directory", Convert.ToString(directory.FullName, CultureInfo.InvariantCulture));

        throw new Exception(string.Format(CultureInfo.InvariantCulture,"Method:{0}", ex.TargetSite), ex);
    }
}
dekdev
źródło
0

Spróbuj tego:

foreach (string files in Directory.GetFiles(SourcePath))
{
   FileInfo fileInfo = new FileInfo(files);
   fileInfo.Delete(); //delete the files first. 
}
Directory.Delete(SourcePath);// delete the directory as it is empty now.
Książę
źródło
Chociaż ten kod może odpowiedzieć na pytanie, dostarczenie dodatkowego kontekstu dotyczącego tego, jak i / lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi. Przeczytaj to
Shanteshwar Inde
0

Dla tych z was, którzy korzystają z DirectoryNotFoundException, dodaj to sprawdzenie:

if (Directory.Exists(path)) Directory.Delete(path, true);
Yster
źródło