2012-08-10 53 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。通过正确使用过滤,您可以获得特定用户在特定时间段内创建的文件列表。另一方面,这种技术相当复杂,适用于对时间要求严格的应用;如果效率不是您的应用程序的焦点,我会选择更简单的解决方案。

相关问题