2010-02-08 16 views
52

Próbuję usunąć folder i wszystkie pliki i foldery w tym folderze, używam poniższy kod i pojawia się błąd Folder is not empty, wszelkie sugestie co do Mogę zrobić?C# usunąć folder i wszystkie pliki i foldery w tym folderze

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

Odpowiedz

84
dir.Delete(true); // true => recursive delete 
54

Przeczytaj Manual:

Directory.Delete Method (String, Boolean)

Directory.Delete(folderPath, true); 
+14

Dlaczego czytać instrukcję, gdy jest o wiele szybciej google i kończy się tutaj? – reggaeguitar

+0

Po ustawieniu wartości true spowoduje to usunięcie całego katalogu, podkatalogu i plików w ścieżce. Czy usunie też samą ścieżkę? Jeśli ustawione na wartość false, usunie ścieżkę, a co z podkatalogiem i plikami w ścieżce? – helloworld

4

Sposób Directory.Delete ma rekurencyjną logiczną parametru, należy zrobić co trzeba

+0

Po ustawieniu wartości true spowoduje to usunięcie całego katalogu, podkatalogu i plików w ścieżce. Czy usunie też samą ścieżkę? Jeśli ustawione na false, usunie ścieżkę, a co z podkatalogiem i plikami w ścieżce – helloworld

6

Err, co tylko dzwoniąc pod numer Directory.Delete(path, true);?

+0

Po ustawieniu na true spowoduje to usunięcie całego katalogu, podkatalogu i plików w ścieżce. Czy usunie też samą ścieżkę? Jeśli ustawione na wartość false, usunie ścieżkę, a co z podkatalogiem i plikami w ścieżce? – helloworld

18

Spróbuj:

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

To będzie usuwał wszystkie pliki i foldery pod „ścieżka” zakładając, że masz uprawnienia do tego.

+0

Po ustawieniu wartości true spowoduje to usunięcie całego katalogu, podkatalogu i plików w ścieżce. Czy usunie też samą ścieżkę? Jeśli ustawione na wartość false, usunie ścieżkę, a co z podkatalogiem i plikami w ścieżce? – helloworld

3

Należy użyć:

dir.Delete(true); 

do rekursywnie usuwanie zawartość tego folderu zbyt. Zobacz MSDN DirectoryInfo.Delete() overloads.

+0

Po ustawieniu wartości true spowoduje to usunięcie całego katalogu, podkatalogu i plików w ścieżce. Czy usunie też samą ścieżkę? Jeśli ustawione na wartość false, usunie ścieżkę, a co z podkatalogiem i plikami w ścieżce? – helloworld

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

Spróbuj tego.

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"); 
     } 
    } 
} 
Powiązane problemy