2016-03-22 15 views
0

Ich suche nach allen Dateien mit bestimmten Dateierweiterungen in einem bestimmten Ordner, aber ich möchte einige Unterverzeichnisse ausschließen, die nicht durchsucht werden sollen. Ich schrieb den folgenden Code für Dateierweiterungen, aber nicht wissen, wie die folders.DirList auszuschließen sind die Ordner i von der Suche ausschließen möchtenVerzeichnisse aus der Dateisuche ausschließen

void DirSearch(string sDir) 
    { 
     List<string> DirList = new List<string>(); 
     DirList.Add("Combustor"); 
     DirList.Add("INLET"); 

     string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet" }; 

     foreach (string file in Directory.EnumerateFiles(
       sDir, "*.*", SearchOption.AllDirectories).Where(s => extensions.Any(ext => ext == Path.GetExtension(s)))) 
     { 
      UpdaterUtility.UpdateFile(file); 

     } 
    } 

Antwort

0

Das ist etwas naiv, aber macht den Job:

void DirSearch(string sDir) 
{ 
    List<string> DirList = new List<string>(); 
    DirList.Add("Combustor"); 
    DirList.Add("INLET"); 

    string[] extensions = { ".c", ".h", ".isi", ".isc", ".xml", ".sheet" }; 

    foreach (string file in Directory.EnumerateFiles(
      sDir, "*.*", SearchOption.AllDirectories) 
    .Where(s =>!DirList.Any(d => s.StartsWith(d, StringComparison.InvariantCultureIgnoreCase)) 
    && extensions.Any(ext => ext == Path.GetExtension(s)))) 
    { 
     UpdaterUtility.UpdateFile(file); 

    } 
} 

Warum ist es naiv: Erstens listet es alle Dateien auf, sogar die in den ignorierten Verzeichnissen, und wenn die Anzahl der unerwünschten Dateien viel größer ist als die der gewünschten Dateien, führt dies zu unnötiger Verarbeitung.

0

Leider gibt es keine eingebaute Möglichkeit, bestimmte Verzeichnisse herauszufiltern. Also müssen Sie diese Suche rekursiv durchführen:

1

Hier gehen Sie! Fügen Sie einfach einen Haken hinzu, um zu sehen, ob das ausgeschlossene Verzeichnis der letzte Teil des Pfades ist. Fügen Sie außerdem einen umgekehrten Schrägstrich "\" am Anfang des Verzeichnisnamens ein.

+0

Geht in das ausgeschlossene Verzeichnis, wenn das ausgeschlossene Verzeichnis das Unterverzeichnis enthält –

+1

Dann können Sie die Enden mit in Contains ändern. –

Verwandte Themen