我有启用配额的驱动器,我想从该驱动器中删除由指定用户(实际上是一组使用特殊帐户运行的应用程序)创建的所有文件。如何在不递归检查 HDD 上的所有文件和文件夹的情况下执行此操作是否由指定用户创建?我只需要获得“迭代器”。
问问题
247 次
3 回答
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);
}
于 2012-08-10T20:37:51.510 回答
1
实际上,您可以使用 USN Change Journal迭代且非常有效地执行此操作,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx。通过正确使用过滤,您可以获得特定用户在特定时间段内创建的文件列表。
另一方面,这种技术相当复杂,适用于时间要求严格的应用;如果效率不是您的应用程序的重点,我会选择更简单的解决方案。
于 2012-08-11T12:48:41.970 回答
1
在提高性能方面,我认为您可以在使用递归算法搜索文件和文件夹时使用任务并行库。
另一种方式,你可以做到这一点Lucence是一个有用的搜索框架,它已经发布了 .NET 版本
于 2012-08-10T19:54:02.173 回答