Maison >développement back-end >C++ >Directory.getFiles () peut-il gérer plusieurs filtres de type de fichier?

Directory.getFiles () peut-il gérer plusieurs filtres de type de fichier?

Susan Sarandon
Susan Sarandonoriginal
2025-01-26 19:26:09966parcourir

Can Directory.GetFiles() Handle Multiple File Type Filters?

en utilisant plusieurs filtres de type de fichier avec Directory.getFiles ()

Le défi:

La récupération de fichiers de différents types à l'aide de Directory.GetFiles() présente un obstacle de programmation commun. La méthode elle-même ne prend pas directement en charge les filtres de type de fichiers multiples.

Approches inefficaces:

Les tentatives comme celles-ci ne parviennent pas à produire les résultats souhaités:

<code class="language-csharp">Directory.GetFiles("C:\path", "*.mp3|*.jpg", SearchOption.AllDirectories);
Directory.GetFiles("C:\path", "*.mp3;*.jpg", SearchOption.AllDirectories);</code>

Solutions:

pour .NET 4.0 et ultérieurement: Tirez parti de Linq pour une solution élégante:

<code class="language-csharp">var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories)
                     .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>

pour les versions .NET plus anciennes: Une approche basée sur Linq similaire fonctionne efficacement:

<code class="language-csharp">var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories)
                     .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>

Optimisation des performances et de la mémoire:

lors de la gestion d'un grand nombre de fichiers, les performances et l'utilisation de la mémoire deviennent essentielles. Comme l'a noté Christian.K, la méthode Directory.GetFiles() peut être à forte intensité de mémoire. La suggestion de Paul Farry d'utiliser Directory.EnumerateFiles() est fortement recommandée pour une meilleure gestion de la mémoire:

<code class="language-csharp">
var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories)
                     .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
```  This iterates through files one at a time, preventing the loading of all filenames into memory simultaneously.</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn