web-dev-qa-db-fra.com

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

J'essaie de supprimer un dossier ainsi que tous les fichiers et dossiers qu'il contient. J'utilise le code ci-dessous et le message d'erreur Folder is not empty s'affiche. Avez-vous des suggestions à 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);
}
71
Jamie
dir.Delete(true); // true => recursive delete
122
Tommy Carlier

Lire le manuel:

Méthode Directory.Delete (String, Boolean)

Directory.Delete(folderPath, true);
74
Morfildur

Essayer: 

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

Cela supprimera récursivement tous les fichiers et dossiers situés sous "chemin", à condition que vous disposiez des autorisations nécessaires.

20
jinsungy

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

6
Dmitri Nesteruk

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

4
Paolo Tedesco

Tu devrais utiliser:

dir.Delete(true);

pour supprimer récursivement le contenu de ce dossier aussi. Voir Surcharge MSDN DirectoryInfo.Delete () .

3
pyrocumulus

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");
        }
    }
}
2
Rosidin Bima
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
dekdev

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.
0
Prince