2012-08-10 9 views
5

Ich habe quotensfähige Laufwerk und ich möchte alle Dateien von angegebenen Benutzer (eigentlich eine Reihe von Anwendungen, die mit speziellen Konto läuft) von diesem Laufwerk erstellt. Wie kann ich dies tun, ohne alle Dateien und Ordner auf HDD rekursiv zu überprüfen, ob es von einem bestimmten Benutzer erstellt wurde oder nicht? Ich muss nur "Iterator" bekommen.Entfernen Sie alle Dateien erstellt von angegebenen Benutzer

+0

Meinst du den * Dateibesitzer *? –

+0

Programmatisch glaube ich, dass Sie alle Dateien Ihres Treibers iterieren müssten. Vielleicht könntest du diese Frage tun, um herauszufinden, ob die Leute dort dir besser helfen können. –

Antwort

2

einen Blick auf folgendes Beispiel

[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

Hmm, sieht so aus, als ob es keine Möglichkeit gibt, diese Liste zu bekommen, ohne jede Datei auf der Festplatte zu durchlaufen. OK danke) – Alexus

1

In Bezug auf die Verbesserung der Leistung, ich denke, Sie könnten Task Parallel Library verwenden, wenn rekursive Algorithmus zum Suchen von Datei und Ordner.

Ein anderer Weg, könnten Sie tun, dass Lucence ein nützlicher Rahmen für die Suche waren und es wurde bereits Version für .NET

+0

TPL und IO - nicht SSD? Für viele Dateien sind die Ergebnisse viel schlechter als ohne TPL ... –

1

Eigentlich kann man tun, Take veröffentlicht, dass iterativ und sehr effizient mit USN Change Journal, siehe http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx. Mit der richtigen Filterung können Sie eine Liste von Dateien abrufen, die von bestimmten Benutzern innerhalb eines bestimmten Zeitraums erstellt wurden.

Auf der anderen Seite ist diese Technik ziemlich kompliziert und eignet sich für zeitkritische Anwendungen; Wenn die Effizienz nicht im Mittelpunkt Ihrer Anwendung steht, würde ich eine einfachere Lösung wählen.