2009-05-29 21 views
9

? System.IO.Directory.Delete ikinci parametre ile true yapmak hile mi?C# içindeki dosya ve dizinlerin özyinelemeli silinmesi C# içinde yinelenen belirli bir dir silme nasıl C#

DÜZENLEME: Dosyaları içeren bir dizini kastediyorum: D Yanlış anlaşılma için özür dilerim.

EDIT2: Buradaki cevaplar biraz daha açıklayıcı olmasına rağmen, aslında kendi sorumu yanıtladım. Bunu ilk başta sormamın sebebi, Sil'in tam olarak çağrılmasına neden olan kodun (2. paramın doğruya ayarlanması), yapılması gereken şeyi yapmamasıydı. Bunun sebebi, RO öznitelik kümesiyle dizin hiyerarşisinde bir yerde bir dosya olması ve Windows XP'nin Polonya sürümünün bunun için gerçekten garip bir mesaj atmasıydı.

+1

Ben zaten bir tek soru görünüyor –

+0

Bu :-) cevabı kendiniz verdi düşünüyorum. Öykü, zaten "yinelemeli" olarak adlandırılan bir boole olan ikinci parametreyi bilmektedir. Temel olarak "nasıl tekrarlayıcı yapabilirim? Doğruyu tekrarlamalı mı yapıyorum?" – joshcomley

+0

Tamam, belki de düzenleme açıklar. Dir bazı dosyaları içeriyor ... –

cevap

8

Yup, işte bu parametrenin noktası. Denedin mi ve herhangi bir problemin mi var? (Sadece iki kez kontrol ettik ve benim için iyi çalışır.)

+2

Değerli olmasına rağmen, yolunuzda Salt Okunur dosyalar/dizinler olmadığından emin olun. Bu bana bir kaç problem yaşattı. – Pondidum

+0

tam olarak bu şey. İpucu için teşekkürler: D –

+0

Alt dizinler de dosyalar içeriyorsa benim için çalışmadı. –

3

Recursive dosya ve klasörler ikisi için çalışır (garip bir şekilde, ben dosyaları için çalışmadığını sanıyordum; benim kötü ...):

public static void RecursiveDelete(DirectoryInfo baseDir) 
    { 
     if (!baseDir.Exists) 
      return; 

     foreach (var dir in baseDir.EnumerateDirectories()) 
     { 
      RecursiveDelete(dir); 
     } 
     baseDir.Delete(true); 
    } 

o Directory.Delete (dir, gerçek), yalnızca geçerli dizinin dosyaları silmek anlaşılmaktadır:

// create some nested folders... 
Directory.CreateDirectory(@"c:\foo"); 
Directory.CreateDirectory(@"c:\foo\bar"); 
// ...with files... 
File.WriteAllText(@"c:\foo\blap.txt", "blup"); 
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop"); 
// ...and delete them 
Directory.Delete(@"c:\foo", true); // fine 
+4

Kodunuzda bir hata var. Açıkçası baz.txt olmalı. –

+0

; --p (--buffer--) –

13

alt dizinleri de dosyaları içeriyorsa benim için çalıştı tek çözüm bir özyinelemeli işlevini kullanarak gereğidir ve alt dizinleri boşsa.

Birilerine yardım edeceğini umarız.

+1

bu gerçek yanıt – Seth

+0

Yeterince ilginç, "baseDir.Delete" artık arsız olmayan klasörü silmeye çalıştığından bu benim için işe yaramaz. –