C # supprimer un dossier et tous les fichiers et dossiers de ce dossier

104

J'essaie de supprimer un dossier et tous les fichiers et dossiers de ce dossier, j'utilise le code ci-dessous et j'obtiens l'erreur Folder is not empty, des suggestions sur ce que je peux faire?

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
la source

Réponses:

167
dir.Delete(true); // true => recursive delete
Tommy Carlier
la source
111

Lisez le manuel:

Directory.Delete, méthode (chaîne, booléen)

Directory.Delete(folderPath, true);
Morfildur
la source
68
Pourquoi lire le manuel alors qu'il est beaucoup plus rapide de le rechercher sur Google et de se retrouver ici?
reggaeguitar
5
C'est tellement vrai
Corvin
4
En effet ... il suffit de googler ceci, et cet article était le premier résultat de Google.
MasterN8
2
Ce que je fais parfois, c'est poser la question et y répondre moi-même, pour aider les futurs googleurs. StackOverflow vous permet de publier la question et la réponse simultanément.
DharmaTurtle
1
J'ai commencé à faire toute ma documentation locale de cette façon. Pas tout à fait une FAQ, mais plutôt des questions SO. c'est-à-dire comment puis-je? ou qu'est-ce que c'est?
Paul Duer le
23

Essayer:

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

Cela supprimera récursivement tous les fichiers et dossiers sous "chemin" en supposant que vous ayez les permissions pour le faire.

jinsungy
la source
6

Euh, pourquoi ne pas appeler Directory.Delete(path, true);?

Dmitri Nesteruk
la source
5

La méthode Directory.Delete a un paramètre booléen récursif, elle doit faire ce dont vous avez besoin

Paolo Tedesco
la source
4

Tu devrais utiliser:

dir.Delete(true);

pour supprimer récursivement le contenu de ce dossier également. Voir les surcharges MSDN DirectoryInfo.Delete () .

pyrocumulus
la source
3

Essaye ça.

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
la source
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
la source
0

Essaye ça:

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.
Prince
la source
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la façon et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse. Lire ceci
Shanteshwar Inde
0

Pour ceux d'entre vous qui courent dans l'exception DirectoryNotFoundException, ajoutez cette vérification:

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