2010-07-08 12 views
2

A l'aide de la fonction GetFiles, comment puis-je filtrer deux types de fichiers (ou plus)?Filtre pour plusieurs types de fichiers

Le code que je utilise actuellement comme suit:

  folderlabel1.Text = folderBrowserDialog1.SelectedPath; //store 
      string extensions = "*.bsc>*.bs2"; 
      string[] filterSplit = extensions.Split('>'); 
      int filtercount = filterSplit.Length; 
      int count = 0; 
      listBox1.Items.Clear(); 
      folder1 = new DirectoryInfo(Path.GetFullPath(@folderlabel1.Text)); 
      for (count = 0; count < filtercount; count++) 
      { 
       fileEntries1 = folder1.GetFiles(filterSplit[count], SearchOption.AllDirectories); 
      } 
      foreach (FileInfo x in fileEntries1) 
      { 
       listBox1.Items.Add(x); //...add to folder display 
      } 

Je suis en train de filtrer les deux * et * .bsc types de fichiers .bs2 ... mais de toute évidence la façon dont il est étant fait ici va simplement copier les fichiers de deuxième type de fichier sur les premiers types de fichiers dans le tableau. Je me demandais: 1. S'il y a une meilleure façon de le faire 2. Comment ajouter le contenu d'un tableau à la fin d'un autre? Est-ce possible? (car alors en utilisant cette méthode, je vais stocker les fichiers dans un tableau et les ajouter à un autre, au lieu d'écraser continuellement le tableau)

Répondre

2

Vous pouvez utiliser la méthode d'extension SelectMany sur votre tableau filterSplit pour récupérer les fichiers pour chaque extension donnée.

var fileEntries1 = filterSplit.SelectMany(filter => folder1.GetFiles(filter, SearchOption.AllDirectories)); 

Cela va créer une IEnumerable<FileInfo> que vous pouvez ensuite utiliser pour attribuer à votre listbox.

Pour une approche non-LINQ, vous pouvez utiliser un List<FileInfo> et la méthode AddRange à l'intérieur d'un foreach par rapport à la baie.

List<FileInfo> fileInfos = new List<FileInfo>(); 

foreach (string filter in filterSplit) 
{ 
    fileInfos.AddRange(folder1.GetFiles(filter, SearchOption.AllDirectories)); 
} 
+0

** var ** n'est pas un type. C'est un mot-clé que vous pouvez utiliser pour abréger les déclarations de variables locales qui contiennent également une affectation. Il déduit le type de la variable de l'expression qui lui est assignée. Ainsi, au lieu d'écrire ** StringBuilder sb = new StringBuilder() **, vous pouvez écrire ** var sb = new StringBuilder() **. Ce n'est rien de plus qu'un raccourci, ce qu'on appelle souvent le «sucre syntacique». – harpo

+0

Euh ... merci? Est-ce harpo ou est-ce macro? –

+0

merci à tous, je l'ai eu à travailler! var est un élément de connaissance intéressant. – rar

Questions connexes