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);
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"));
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"));
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.
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!