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

Antworten:



110

Lesen Sie das Handbuch:

Directory.Delete-Methode (String, Boolean)

Directory.Delete(folderPath, true);

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.





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

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

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.

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.