2012-08-10 20 views
5

私は割り当てられたドライブを持っており、特定のユーザー(実際には特別なアカウントを使用して実行される一連のアプリケーション)によって作成されたファイルをすべて削除します。 HDD上のすべてのファイルとフォルダを繰り返し確認せずに、これを行うにはどのようにすればいいですか?私はちょうど "イテレータ"を取得する必要があります。指定されたユーザーによって作成されたすべてのファイルを削除します

+0

*ファイルの所有者*を意味しますか? –

+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); 
    } 
+0

うーん、ハードドライブ上の各ファイルを反復せずにこのリストを取得する方法がないように見えます。大丈夫、ありがとう) – Alexus

1

パフォーマンスの向上の点では、再帰アルゴリズムを使用してファイルとフォルダを検索するときにタスク並列ライブラリを使用できると思います。

別の方法、あなたは実際に、あなたがそれを行うことができますLucenceは、検索に便利なフレームワークであり、それは、すでに.NET

+0

TPLとIO - SSDではない?たくさんのファイルの結果は、TPLなしの場合よりもずっと悪くなります... –

1

上を見てみましょうことを行うことができます繰り返しと非常に USN変更ジャーナルを効率的に使用して、http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspxを参照してください。フィルタリングを適切に使用すると、特定の期間内に特定のユーザーが作成したファイルの一覧を取得できます。

一方、この手法は非常に複雑で、時間が重要なアプリケーションに適しています。効率がアプリケーションの焦点でない場合は、より簡単なソリューションを選択します。

関連する問題