Entwickler-Ecke

IO, XML und Registry - Directory nach bestimmten Dateiendungen durchsuchen


MoBBer - Fr 24.07.09 10:40
Titel: Directory nach bestimmten Dateiendungen durchsuchen
Hallo zusammen,

hab mal wieder eine Frage. Mit einem FolderBrowserDialog sucht man sich einen Ordner aus. Nun möchte ich diesen Ordner(die Unterordner können ignoriert werden)
nach .bmp-Datein durchsucehn und alle Funde in eine ListBox eintragen. Ich denke das geht mit dem directory Searcher aber wie benutzt man den?

Danke schonmal im Vorraus.

mfG MoBBer


Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Fr 24.07.2009 um 20:16


danielf - Fr 24.07.09 11:10

Hallo,

ich bin mir nicht ganz sicher, aber der DirectorySearcher ist für Active Directory gedacht (siehe http://msdn.microsoft.com/de-de/library/system.directoryservices.directorysearcher.aspx).

Für das was du willst ist DirectoryInfo wohl geeigneter.

C#-Quelltext
1:
2:
3:
DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath);

            di.GetFiles("*.bmp");


Ich würde dir aber raten gleich einen OpenFileDialog nehmen. Dann kann der Anwender die Bilder genauer selektieren.

Zum Beispiel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
           OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Bitmap (*.bmp)| *.bmp";
            ofd.Multiselect = true;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                this.listBox1.Items.Clear();

                foreach (string file in ofd.FileNames)
                {
                    this.listBox1.Items.Add(file);
                }
            }


Gruß Daniel


MoBBer - Fr 24.07.09 11:12

Omg hab den Wald vor lauter Bäumen nicht gesehen.
Wofür gibts denn die Klasse IO und GetFiles();


C#-Quelltext
1:
      string[] bilder = Directory.GetFiles(Pfad, "*.bmp");                    


Danke trotzdem für deine Antwort.

Zum selektieren ist ja die Listbox gedacht, sieht nämlich so aus das ein Pfad schon vorgegeben sein kann und dann klickt man auf bild ändern und ein PopUp erscheint mir einer Vorschau und der Listbox.

Das Thema kann eigentlich gelöscht werden, dass Thema wurde schon öfters besprochen, oder zumindest in das IO Forum verschoben werden.


Th69 - Fr 24.07.09 11:17

Wie danielf schon geschrieben hat, ist DirectorySearcher die falsche Klasse.
Ich würde direkt die (statischen) Directory-Methoden benutzen:

C#-Quelltext
1:
string[] bitmapfiles = Directory.GetFiles(path, "*.bmp");                    

Nur wenn man weitere Verzeichniseigenschaften benötigt, ist die DirectoryInfo sinnvoll (ähnliches gilt für File vs. FileInfo).

Schau einfach mal in die MSDN bezüglich dieser Klassen.

Edit: falsche Tags benutzt - das kommt davon, wenn man in verschiedenen Foen unterwegs ist -)
und zu langsam bin ich auch noch...


MoBBer - Fr 24.07.09 11:34

Macht doch nix.
Kann ich GetFiles() auch mehrere Endungen übergeben (das gibt bei mir immer InvalideChar) oder muss ich dann extra mehrere Arrays anlegen oder gibt es villeicht doch eine besser Methode wenn ich alle möglichen Bildformate haben möchtet?


ffgorcky - Di 28.07.09 07:52

Also wenn ich mich richtig erinnere denke ich mal, dass das einfach so klappen müsste, indem Du sie mit Semikolon (also dem ;) trennst - oder?
Auf dem Sektor habe ich aber auch noch nicht so wirklich (frische) Erfahrungen.
Aber so ist das zum Beispiel auch im OpenDialog in Paint für MSJPEG angegeben.


jaenicke - Di 28.07.09 08:12

Nein, das geht nicht. Entweder man fügt mehrere Suchergebnisse zusammen oder man holt sich alle Dateinamen und sucht selbst. Letzteres sieht dann z.B. so aus:

C#-Quelltext
1:
2:
            IEnumerable<string> FileNames = Directory.GetFiles(@"c:\windows").Where(
                CurFile => CurFile.EndsWith(".exe") || CurFile.EndsWith(".txt"));
Das geht allerdings erst mit Linq (ggf. oben using System.Linq; ergänzen) ab .NET 3.0.


weTTexFry - Di 28.07.09 08:40

Ne andre möglichkeit endungen zu suchen is regex

eine liste zum erstellen des suchstrings findest du auf http://www.AddedBytes.com unter cheat-sheets
oder gleich hier als pdf: http://www.addedbytes.com/download/regular-expressions-cheat-sheet-v2/pdf/


MoBBer - Di 04.08.09 17:24

Hmm ich machs einfach mit mehreren Arrays, dass ist einfach und tuts für meine Zwecke vollkommen.