Frage

Ich brauche ein Laufwerk (C :, D: usw.) für die Suche nach einem partuicular Dateityp (Erweiterung wie .xml, .csv, .xls). Wie Vorform ich eine rekursive Suche in einer Schleife alle Verzeichnisse und innere Verzeichnisse und gibt den vollständigen Pfad, wo die Datei (en) sind? oder wo kann ich Informationen zu diesem Thema erhalten?

VB.NET oder C #

Danke

Bearbeiten ~ ich in einige Fehler leite wie derzeit keine Systemvolumen Zugriff auf Zugriff verweigert usw. Weiß jemand, wo ich auf die Implementierung einer Datei zu suchen einige smaple Code sehen kann? Ich brauche nur fanden ein ausgewähltes Laufwerk und gibt den vollständigen Pfad des Dateitypen für alle Dateien zu suchen.

War es hilfreich?

Lösung

Wie wäre es damit? Es vermeidet die Ausnahme ausgelöst oft durch die eingebaute rekursive Suche (dh Sie in einem einzelnen Ordner Zugriff verweigert werden, und Ihre ganze Suche stirbt) und faul ausgewertet wird (dh es so bald zurückkehrt führt, wie er sie findet statt Pufferung 2000 Ergebnisse). Der faule Verhalten können Sie etc reaktions UIs bauen, und funktioniert auch gut mit LINQ (vor allem First(), Take(), etc).

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
static class Program { // formatted for vertical space
    static void Main() {
        foreach (string match in Search("c:\\", "*.xml")) {
            Console.WriteLine(match);
        }
    }
    static IEnumerable<string> Search(string root, string searchPattern) {
        Queue<string> dirs = new Queue<string>();
        dirs.Enqueue(root);
        while (dirs.Count > 0) {
            string dir = dirs.Dequeue();

            // files
            string[] paths = null;
            try {
                paths = Directory.GetFiles(dir, searchPattern);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string file in paths) {
                    yield return file;
                }
            }

            // sub-directories
            paths = null;
            try {
                paths = Directory.GetDirectories(dir);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string subDir in paths) {
                    dirs.Enqueue(subDir);
                }
            }
        }
    }
}

Andere Tipps

System.IO.Directory.GetFiles(@"c:\", "*.xml", SearchOption.AllDirectories);

Es sieht aus wie der AWE Bibliothek - steht für rec ursive ls - hat jetzt eine rel="noreferrer">. Ich habe gerade las darüber in Dr. Dobbs .

Würde wie verwendet werden:

using Recls;
using System;
static class Program { // formatted for vertical space
    static void Main() {
        foreach(IEntry e in FileSearcher.Search(@"c:\", "*.xml|*.csv|*.xls")) {
            Console.WriteLine(e.Path);
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top