C # elimina una cartella e tutti i file e le cartelle all'interno di quella cartella


104

Sto cercando di eliminare una cartella e tutti i file e le cartelle all'interno di quella cartella, sto usando il codice qui sotto e ottengo l'errore Folder is not empty, qualche suggerimento su cosa posso fare?

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

Risposte:



111

Leggi il manuale:

Metodo Directory.Delete (String, Boolean)

Directory.Delete(folderPath, true);

68
Perché leggere il manuale quando è molto più veloce cercarlo su google e finire qui?
reggaeguitar

5
Questo è così vero
Corvin

4
Effettivamente ... ho appena cercato su Google, e questo post è stato il primo risultato di Google.
MasterN8

2
Quello che faccio a volte è porre la domanda e poi rispondere io stesso, per aiutare i futuri googler. StackOverflow ti consente di pubblicare la domanda e rispondere contemporaneamente.
DharmaTurtle

1
Ho iniziato a fare tutta la mia documentazione locale in questo modo. Non proprio una FAQ, più simile a domande SO. cioè come faccio? o cos'è questo?
Paul Duer,

23

Provare:

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

Questo cancellerà in modo ricorsivo tutti i file e le cartelle sotto "path" assumendo che tu abbia i permessi per farlo.





3

Prova questo.

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

Prova questo:

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.

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo su come e / o perché risolve il problema migliorerebbe il valore a lungo termine della risposta. Leggi questo
Shanteshwar Inde

0

Per quelli di voi che si imbattono in DirectoryNotFoundException, aggiungere questo controllo:

if (Directory.Exists(path)) Directory.Delete(path, true);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.