C # Löschen Sie einen Ordner und alle Dateien und Ordner in diesem Ordner

104

Ich versuche, einen Ordner und alle Dateien und Ordner in diesem Ordner zu löschen. Ich verwende den folgenden Code und erhalte die Fehlermeldung Folder is not empty. Gibt es Vorschläge, was ich tun kann?

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
quelle

Antworten:

166
dir.Delete(true); // true => recursive delete
Tommy Carlier
quelle
110

Lesen Sie das Handbuch:

Directory.Delete-Methode (String, Boolean)

Directory.Delete(folderPath, true);
Morfildur
quelle
67
Warum das Handbuch lesen, wenn es viel schneller geht, es zu googeln und hier zu landen?
Reggaeguitar
5
Dies ist so wahr
Corvin
4
In der Tat ... habe dies nur gegoogelt und dieser Beitrag war das erste Ergebnis von Google.
MasterN8
2
Manchmal stelle ich die Frage und beantworte sie dann selbst, um zukünftigen Googlern zu helfen. Mit StackOverflow können Sie die Frage und die Antwort gleichzeitig veröffentlichen.
DharmaTurtle
1
Ich habe begonnen, alle meine lokalen Dokumentationen auf diese Weise durchzuführen. Keine FAQ, eher SO-Fragen. dh wie mache ich? oder was ist das
Paul Duer
23

Versuchen:

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

Dadurch werden alle Dateien und Ordner unter "Pfad" rekursiv gelöscht, sofern Sie über die entsprechenden Berechtigungen verfügen.

jinsungy
quelle
6

Ähm, was ist mit einem Anruf Directory.Delete(path, true);?

Dmitri Nesteruk
quelle
5

Die Directory.Delete- Methode verfügt über einen rekursiven booleschen Parameter. Sie sollte das tun, was Sie benötigen

Paolo Tedesco
quelle
3

Versuche dies.

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
quelle
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
quelle
0

Versuche dies:

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.
Prinz
quelle
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern. Lesen Sie dies
Shanteshwar Inde
0

Fügen Sie für diejenigen unter Ihnen, die auf die DirectoryNotFoundException stoßen, diese Prüfung hinzu:

if (Directory.Exists(path)) Directory.Delete(path, true);
Yster
quelle