Domanda

Vorrei riempire un array di stringhe con tutte le immagini trovate all'interno di una directory.

Fino ad ora utilizzo quanto segue per ottenere tutte le immagini con il formato JPG

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

Ora vorrei estenderlo e ottenere tutti i formati di immagine.

Potrei utilizzare la directory.GetFiles combinati con un "Enumerazione ImageFormat"?

È stato utile?

Soluzione

ciao puoi usare ciò che ho trovato come contenuto della comunità a 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();
}
.

Un'alternativa che utilizza la valutazione pigra (solo .NET 4.0):

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

Puoi usarlo come GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png").È essenzialmente solo una ricerca per ogni filtro, quindi è non come efficiente come può ottenere.

Una versione finale è (è solo .net 4.0, ma può essere effettuata almeno a una soluzione 2.0):

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;
}
.

Credo che l'ultimo sia il più veloce perché loop solo una volta.Ma questo dipende da come la ricerca del pattern è implementata in Directory e in che modo il sistema operativo cerca.È necessario un test di prestazione che non ho fatto.

Altri suggerimenti

Questa è una soluzione 2.0 .NET.

Ho fatto qualcosa di simile in c #.Questa soluzione ha utilizzato una cartella come punto di rilascio per le immagini da elaborare.Caricamento di ciascun tipo di file poiché un'immagine non è una soluzione corretta in tutti i casi, ma volevo convalidare ogni file come immagine caricabile.

    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();
        }
    }
.

Risulta che ho dimenticato un pezzo ... Prima di elaborare i file, ho utilizzato una funzione per limitare i file in fase di elaborazione:

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;
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top