2017-12-28 4 views
-2

Ich mache eine Konsolenanwendung und aus einem bestimmten Ordner möchte ich nur die Bilder mit der spezifischen Erweiterung erhalten.Image-Datei aus Ordner in FileInfo holen

Unter Code versuche ich, aber es ruft alle Dateien aus dem bestimmten Pfad ab.

string[] extensions = { ".jpg", ".jpeg", ".png", ".gif", ".tif" }; 
FileInfo[] files = new DirectoryInfo(SourcePath).GetFiles("*.*", SearchOption.AllDirectories); 

Wie kann ich die Erweiterung auf FileInfo[] setzen?

aktualisiert Ausgabe

enter image description here

Antwort

List<String> ImageFiles = Directory.GetFiles(SourcePath, "*.*", 
      SearchOption.AllDirectories) 
      .Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" } 
      .Contains(Path.GetExtension(file))) 
      .ToList(); 
      List<FileInfo> files = new List<FileInfo>(); 
      foreach (string filess in ImageFiles) 
      { 
       string replace = filess.Replace(@"\", "/"); 
       files.Add(new FileInfo(replace.Split('/').Last())); 
      } 

hier Wie kann ich von für jede Schleife loszuwerden, da ich nur Dateinamen bin benötigen und nicht den ganzen Weg

+1

Im Moment gibt es absolut keine Verbindung zwischen Ihren 'Erweiterungen' und dem Aufruf von' GetFiles'. Sie müssen entweder die Liste der Dateien filtern oder die Erweiterungen iterieren. –

+2

Mögliches Duplikat von [Können Sie Directory.GetFiles() mit mehreren Filtern aufrufen?] (Https://stackoverflow.com/questions/163162/can-you-call-directory-getfiles-with-multiple-filters) –

+0

@ManfreedRadlwimmer \t Ist es nicht möglich, Daten in FileInfo [] Dateien zu erhalten? –

Antwort

2

Versuchen Sie folgendes Code-Snippet. Aktualisiert die Antwort gemäß Ihrer Frage

void Main() 
{ 


List<string> ext = new List<string> { ".jpg", ".jpeg", ".png", ".gif", ".tif" }; 
FileInfo[] files = new DirectoryInfo(@"c:\temp").EnumerateFiles("*.*", SearchOption.AllDirectories) 
.Where(path => ext.Contains(Path.GetExtension(path.Name))) 
.Select(x => new FileInfo(x.FullName)).ToArray(); 
} 

// Define other methods and classes here 
+0

Ein 'ToLower' würde auch Dateien wie' test.JPG' enthalten. Auch die 'GetExtensions'-Methode enthält das '.', also müsste es auch in' ext' vorhanden sein. –

+0

@ManfreedRadlwimmer: Guter Punkt –

+0

Ist es nicht möglich, Daten in FileInfo [] Dateien zu bekommen? –

3

Bitte verwenden Sie den folgenden Code.

List<String> ImageFiles = Directory.GetFiles(DirPath, "*.*", 
       SearchOption.AllDirectories) 
       .Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" } 
       .Contains(Path.GetExtension(file))) 
       .ToList(); 
       List<FileInfo> images = new List<FileInfo>(); 
       foreach (string fileName in ImageFiles) 
       { 
       images.Add(new FileInfo(fileName)); 
       } 
+0

Ist es nicht möglich, Daten in FileInfo [] Dateien zu bekommen? –

+0

ja es ist möglich ich habe den code geändert. –

+0

Kann es ohne Foreach-Schleife gemacht werden und kann ich nur die Dateinamen erhalten, anstatt den vollständigen Pfad zu bekommen? –

2

Ich denke, es wird besser sein, Directory.EnumerateFiles anstelle von GetFiles zu verwenden. Die EnumerateFiles-Methode wartet nicht, bis alle Dateien geladen sind. Was bei einer großen Anzahl von Dateien effizienter sein kann.

void Main() 
{ 
    string[] ext = new List<string> {".jpg", ".jpeg", ".png", ".gif", ".tif"}; 
    FileInfo[] files = new DirectoryInfo(SourcePath).EnumerateFiles(@"C:\temp", "*.*", SearchOption.AllDirectories) 
    .Where(path => ext.Contains(Path.GetExtension(path.ToLower())); 
} 

UPDATE:

Antwort auf aktuelle Frage.

+0

Ich wurde in Ihrem Code Problem –

+0

Was ist das? Welches Problem? – cloudikka

+0

sehen Sie die aktualisierte Frage –

Verwandte Themen