2009-07-26 43 views
6

Có cách nào để xóa tất cả các tệp & thư mục con của một thư mục được chỉ định mà không cần lặp lại chúng không?Cách tốt nhất để dọn sạch thư mục là gì?

Giải pháp không thanh lịch:

public static void EmptyDirectory(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     // Delete all files 
     foreach (var file in Directory.GetFiles(path)) 
     { 
      File.Delete(file); 
     } 

     // Delete all folders 
     foreach (var directory in Directory.GetDirectories(path)) 
     { 
      Directory.Delete(directory, true); 
     } 
    } 
} 
+0

http://social.msdn.microsoft.com/Forums/vstudio/en-US/2239b45a-3f19-4a2a-b5cd-050b3ee32b9d/how-can-i-check-folder-is-empty-or-not ? forum = csharpgeneral –

Trả lời

10

Làm thế nào về System.IO.Directory.Delete? Nó có tùy chọn đệ quy, bạn thậm chí còn sử dụng nó. Xem xét mã của bạn có vẻ như bạn đang cố gắng làm điều gì đó hơi khác - dọn sạch thư mục mà không xóa nó, phải không? Vâng, bạn có thể xóa nó và tạo lại nó :)


Trong mọi trường hợp, bạn (hoặc một số phương pháp bạn sử dụng) phải lặp qua tất cả các tệp và thư mục con. Tuy nhiên, bạn có thể duyệt qua cả tập tin và thư mục cùng một lúc, sử dụng GetFileSystemInfos:

foreach(System.IO.FileSystemInfo fsi in 
    new System.IO.DirectoryInfo(path).GetFileSystemInfos()) 
{ 
    if (fsi is System.IO.DirectoryInfo) 
     ((System.IO.DirectoryInfo)fsi).Delete(true); 
    else 
     fsi.Delete(); 
} 
+0

Đó là một giải pháp tốt, nhưng tôi không thấy nó thanh lịch hơn mã ban đầu như thế nào. Tôi chỉ không hiểu vấn đề là gì. –

+0

Thao tác này sẽ xóa tất cả siêu dữ liệu, chẳng hạn như ACL và dấu thời gian. Điều này có thể hoặc không thể chấp nhận được đối với một trường hợp sử dụng cụ thể – jpaugh

+0

@jpaugh Việc xóa và tạo lại các thư mục sẽ làm điều đó, nhưng đó không phải là giải pháp này. Không có ACL hoặc dấu thời gian nào bị mất trừ các tệp bị xóa, tất nhiên, sẽ mất tất cả thông tin liên quan đến các tệp đó, tôi không thể tưởng tượng được bất kỳ điều gì khác nếu tệp bị xóa vĩnh viễn. – BlueMonkMN

3

Tại sao là không phải thanh lịch? Nó sạch sẽ, rất dễ đọc và thực hiện công việc.

2

Vâng, bạn có thể luôn luôn chỉ cần sử dụng Directory.Delete ....

http://msdn.microsoft.com/en-us/library/aa328748%28VS.71%29.aspx

Hoặc nếu bạn muốn được ưa thích, sử dụng WMI để xóa thư mục.

+0

Nếu tôi giải thích bài viết của mình một cách chính xác, anh ấy không muốn xóa thư mục, chỉ các tệp và thư mục con trong đó. –

+1

Yeh, đúng, nhưng Directory.Delete vẫn là cách tốt nhất. Xóa thư mục và tạo lại một thư mục trống ở vị trí của nó là "thanh lịch" hơn và có thể nhanh hơn lặp lại. – TheSmurf

+0

Cách tiếp cận đó sẽ không giữ lại bất kỳ quyền truy cập thư mục không được kế thừa nào. – Craig

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