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
Libérer: 2025-01-26 19:26:09
original
933 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal