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
987 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:

Directory.GetFiles("C:\path", "*.mp3|*.jpg", SearchOption.AllDirectories);
Directory.GetFiles("C:\path", "*.mp3;*.jpg", SearchOption.AllDirectories);
Copier après la connexion

Solutions:

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

var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories)
                     .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
Copier après la connexion

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

var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories)
                     .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
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:

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.
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!

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