2012-10-25 9 views
5

Iterieren ich diese Funktion verwenden, für alle EXE-Dateien in ausgewählten Verzeichnis suchen:aktualisieren Fortschrittsbalken während Dateistruktur

public static IEnumerable<string> GetFiles(string root, string searchPattern) 
{ 
    Stack<string> pending = new Stack<string>(); 
    pending.Push(root); 
    while (pending.Count != 0) 
    { 
     var path = pending.Pop(); 
     string[] next = null; 
     try 
     { 
      next = Directory.GetFiles(path, searchPattern); 
     } 
     catch { } 
     if (next != null && next.Length != 0) 
      foreach (var file in next) yield return file; 
     try 
     { 
      next = Directory.GetDirectories(path); 
      foreach (var subdir in next) pending.Push(subdir); 
     } 
     catch { } 
    } 
} 

Wie kann ich die Statusleiste Status aktualisieren, basierend auf der Anzahl der Dateien gefunden?

+0

Ist das eine WPF-App? –

+2

Da Sie die Gesamtanzahl der Dateien nicht kennen (oder sollte ich sagen, es sei denn, Sie kennen die Gesamtzahl der Dateien), wenn Sie wissen, wie viele Sie bisher gefunden haben, sagen Sie nicht, wie% abgeschlossen Sie sind. Verwenden Sie einfach eine Auswahlleiste. – Servy

+0

Nein, seine Standard-Windows-Formularanwendung in VS 2010 – user1775334

Antwort

0

Sie würden suchen und dann den Fortschrittsbalken auf die Anzahl der gefundenen Dateien setzen.

Sie können einen Zähler zuordnen, die den Wert a = zu Anzahl der Dateien ordnet dann

progressBar.Maximum gesetzt gefunden = a;

+0

Können Sie ein Beispiel schreiben? Danke. – user1775334

+2

Die Arbeit, die er macht, ist einfach die Dateien zu finden. Er wird nicht wissen, was das Maximum ist, bis er fertig ist. – Servy

+0

Es müsste zweimal gewickelt werden, um alle Dateien zu finden, um das Maximum zu erhalten und um dann tatsächlich nach ganzen Dateien zu suchen. Seine beste Wette ist eine Marquee-Leiste mit einem Label # der Datei gefunden. – Pichu

0

Vielleicht fehlt mir hier etwas, aber wieso weisen Sie die maximale Fortschrittsleiste nicht pending.Count zu und fügen Sie bei jeder Verarbeitung einer Datei 1 zum Wert des Fortschrittsbalkens hinzu?

1

Der Punkt ist, dass Sie nicht die Gesamtzahl der exe-Dateien (aka die 100%) wissen, die Sie finden, so dass Sie grundsätzlich keine Fortschrittsbalken rendern können! Für diese Art von Aufgaben wäre eine Sanduhr oder eine Marquee-Bar besser geeignet ...