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 に答える