2012-08-10 28 views
5

Tôi có ổ đĩa kích hoạt hạn ngạch và tôi muốn xóa tất cả các tệp được tạo bởi người dùng được chỉ định (thực tế là một tập hợp các ứng dụng chạy bằng tài khoản đặc biệt) từ ổ đó. Làm thế nào tôi có thể làm điều này mà không cần đệ quy kiểm tra tất cả các tập tin và thư mục trên HDD là nó được tạo ra bởi người sử dụng specifed hay không? Tôi chỉ cần nhận được "iterator".Xóa tất cả các tệp được tạo bởi người dùng được chỉ định

+0

Bạn có nghĩa là * chủ sở hữu tệp * không? –

+0

Lập trình tôi tin rằng bạn cần lặp lại tất cả các tệp của trình điều khiển. Có lẽ bạn có thể di chuyển câu hỏi này làm serverfault để xem nếu guys có thể giúp bạn tốt hơn. –

Trả lời

2

Hãy xem trên theo gương

[Test] 
    public void Test() 
    { 
     string user = @"Domain\UserName"; 
     var files = Directory.EnumerateFiles(@"C:\TestFolder") 
      .Where(x => IsOwner(x, user)); 
     Parallel.ForEach(files, File.Delete); 
    } 

    private static bool IsOwner(string filePath, string user) 
    { 
     return string.Equals(File.GetAccessControl(filePath).GetOwner(typeof (NTAccount)).Value, user, 
          StringComparison.OrdinalIgnoreCase); 
    } 
+0

Hmm, có vẻ như không có cách nào để có được danh sách này mà không cần lặp lại từng tập tin trên đĩa cứng. được rồi cảm ơn) – Alexus

1

Về mặt cải thiện hiệu suất, tôi nghĩ bạn có thể sử dụng Thư viện song song tác vụ khi sử dụng thuật toán đệ quy để tìm kiếm tệp và thư mục.

Một cách khác, bạn có thể làm điều đó Lucence là một khuôn khổ hữu ích cho tìm kiếm và nó đã được xuất bản phiên bản dành cho .NET

+0

TPL và IO - không phải SSD? Đối với rất nhiều tập tin kết quả sẽ tồi tệ hơn nhiều mà không có TPL ... –

1

Trên thực tế, bạn có thể làm điều đó lặp lại và rất hiệu quả bằng cách sử dụng USN Change Journal, xem http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx. Với việc sử dụng thích hợp lọc, bạn có thể nhận danh sách các tệp được tạo bởi người dùng cụ thể trong khoảng thời gian cụ thể.

Mặt khác, kỹ thuật này khá phức tạp và phù hợp với các ứng dụng thời gian quan trọng; nếu hiệu quả không phải là tiêu điểm của ứng dụng của bạn, tôi sẽ chọn giải pháp đơn giản hơn.