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