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

Réponses:



111

Lisez le manuel:

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

Directory.Delete(folderPath, true);

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.





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

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

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.

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.