2012-08-10 49 views
5

我有配額驅動的驅動器,我想從該驅動器中刪除由指定用戶(實際上是一組使用特殊帳戶運行的應用程序)創建的所有文件。我怎樣才能做到這一點,而不用遞歸檢查硬盤上的所有文件和文件夾是否由指定的用戶創建?我只需要獲得「迭代器」。刪除指定用戶創建的所有文件

+0

你的意思是*文件所有者*? – 2012-08-10 19:44:51

+0

以編程方式,我相信你需要遍歷驅動程序的所有文件。也許你可以移動這個問題做serverfault,看看那裏的傢伙是否可以幫助你更好。 – 2012-08-10 19:51:06

回答

2

就以下面的例子

[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

嗯,看起來像沒有辦法在沒有重複硬盤上的每個文件的情況下獲得此列表。好,謝謝 ) – Alexus 2012-08-13 12:39:03

1

在提高性能方面,我認爲在使用遞歸算法搜索文件和文件夾時可以使用任務並行庫。

另一種方式,你能做到這一點Lucence是爲尋找一個有用的框架,它已經發布的版本爲.NET

+0

TPL和IO - 不是SSD?對於很多文件來說,結果會比沒有TPL的結果差很多...... – 2012-08-10 20:52:43

1

其實一看,你可以這樣做迭代地和有效地使用USN Change Journal的非常,參見http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx。通過正確使用過濾,您可以獲得特定用戶在特定時間段內創建的文件列表。另一方面,這種技術相當複雜,適用於對時間要求嚴格的應用;如果效率不是您的應用程序的焦點,我會選擇更簡單的解決方案。

相關問題