2009-05-29 47 views
9

cách xóa một thư mục đã cho đệ quy trong C#? Nên System.IO.Directory.Delete với tham số thứ hai đúng làm các trick?Xóa đệ quy các tệp và thư mục trong C#

EDIT: Tôi có nghĩa là một thư mục chứa các tệp: D Xin lỗi vì sự hiểu lầm.

EDIT2: Vì vậy, tôi thực sự đã trả lời câu hỏi của riêng mình, mặc dù câu trả lời ở đây có một chút rõ ràng hơn. Lý do tôi hỏi điều này ngay từ đầu là đoạn mã có chính xác lời gọi của Delete (tham số thứ 2 được đặt thành true) đã không làm những gì nó được cho là đang làm. Khi nó bật ra nguyên nhân của việc đó là có một tập tin ở đâu đó trong hệ thống phân cấp thư mục với tập hợp thuộc tính RO, và phiên bản Ba Lan của Windows XP đã ném một thông điệp thực sự lạ cho điều đó.

+1

Tôi nghĩ rằng bạn đã đưa ra câu trả lời cho mình :-) –

+0

này dường như là một câu hỏi kỳ quặc. Người hỏi đã biết về tham số thứ hai, là một boolean được gọi là "đệ quy". Về cơ bản, bạn đang nói "làm cách nào để đệ quy? Tôi có đặt đệ quy thành sự thật không?" – joshcomley

+0

OK, có lẽ bản chỉnh sửa đã rõ ràng. Thư mục chứa một số tệp ... –

Trả lời

8

Yup, đó là điểm của tham số đó. Bạn đã thử nó và có bất kỳ vấn đề? (Tôi vừa kiểm tra lại, và nó hoạt động tốt cho tôi.)

+2

Mặc dù giá trị của nó đảm bảo không có tệp/thư mục chỉ đọc nào trong đường dẫn của bạn trước tiên. Điều đó gây ra cho tôi một vài vấn đề trong khi trở lại. – Pondidum

+0

đó chính xác là điều. THanks cho các đầu mối: D –

+0

Đã không làm việc cho tôi, nếu các thư mục con cũng chứa các tập tin. –

3

Công việc đệ quy cho cả tệp và thư mục (kỳ quặc, tôi nghĩ nó không hoạt động đối với tệp; xấu) ...

// 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

Có lỗi trong mã của bạn. Nó sẽ là baz.txt, rõ ràng. –

+0

;-p (--buffer--) –

13

giải pháp duy nhất mà làm việc cho tôi nếu các thư mục con cũng chứa file là sử dụng một hàm đệ quy:

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

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

dường như Directory.Delete (dir, true) chỉ xóa các file của thư mục hiện và các thư mục con nếu chúng trống.

Hy vọng nó sẽ giúp ai đó.

+1

đây là câu trả lời thực tế – Seth

+0

Thú vị đủ, điều này không có tác dụng đối với tôi, vì "baseDir.Delete" cố gắng xóa thư mục không phải là arround nữa. –

Các vấn đề liên quan