Question

Je voudrais obtenir un tableau de chaîne avec toutes les images trouvées dans un répertoire.

Jusqu'à présent, j'utilise ce qui suit pour obtenir toutes les images avec le format JPG

Dim List() as string = Directory.GetFiles(Path, "*.jpg")

Maintenant, je voudrais l'étendre et obtenir tous les formats d'image.

Puis-je utiliser le répertoire.getFiles combiné avec un "ImageFormat énumération"?

Était-ce utile?

La solution

Salut vous pouvez utiliser ce que j'ai trouvé comme contenu communautaire à http://msdn.microsoft.com/en-us/library/wz42302f.aspx.:

private static string[] GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}

Une alternative qui utilise une évaluation paresseuse (.NET 4.0 uniquement):

private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}

Vous pouvez l'utiliser comme GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png"). C'est essentiellement une recherche pour chaque filtre, donc c'est ne pas Aussi efficace que possible.

Une version finale est (est .NET 4.0 uniquement, mais peut être faite sur une solution 2.0 au moins):

private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
   return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
          let extension = Path.GetExtension(file)
          where extension == ".jpg" || extension == ".gif" || extension == ".png"
          select file;
}

Je crois que le dernier est le plus rapide car il ne boucle qu'une seule fois. Mais cela dépend de la façon dont la recherche de motifs est implémentée dans Directory et comment le système d'exploitation recherche. Un test de performance est nécessaire que je n'ai pas fait.

Autres conseils

Il s'agit de la solution 2.0 .NET.

J'ai fait quelque chose de similaire en C #. Cette solution a utilisé un dossier comme point de dépôt pour le traitement des images. Le chargement de chaque type de fichier en tant qu'image n'est pas une solution correcte dans tous les cas, mais je voulais valider chaque fichier en tant qu'image chargée.

    string[] files = Directory.GetFiles(folderPath);
    foreach(string file in files)
    {


        System.Drawing.Image img = null;

        try
        {
            img = System.Drawing.Image.FromFile(file);
        }
        catch
        {
            // do nothing
        }

        if (img != null)
        {
            // did something

            img.Dispose();
        }
    }

Il s'avère que j'ai oublié une pièce ... Avant de traiter les fichiers, j'ai utilisé une fonction pour limiter les fichiers en cours de traitement:

private bool IsImage(FileInfo file)
{
    bool imageFile = false;
    if ((file.Extension.ToLower() ==".jpg")||
       (file.Extension.ToLower() ==".gif")||
       (file.Extension.ToLower() == ".bmp") ||
       (file.Extension.ToLower() ==".png"))
    {
        imageFile = true;
    }

    return imageFile;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top