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!