5

我有启用配额的驱动器,我想从该驱动器中删除由指定用户(实际上是一组使用特殊帐户运行的应用程序)创建的所有文件。如何在不递归检查 HDD 上的所有文件和文件夹的情况下执行此操作是否由指定用户创建?我只需要获得“迭代器”。

4

3 回答 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 回答