Anzahl Dateien ermitteln

Hallo Experten.

Ich habe mir ein kleines Programm geschrieben (VS2005 / C#) um Dateien nach einem bestimmten Muster umzubenennen. Hintergrund ist, dass ich Bilder (jpg) und Videos (avi) von der Speicherkarte meiner Kamera auf den PC kopiere und diese dann vom Namen her mit dem Erstellungsdatum benenne, zusätzlich bekommen die Bilder/Videos von einem Tag eine laufende Nummer.

Soweit klappt das auch alles prima, aber ich würde gerne das Programm etwas optimieren. Ich habe mir eine Fortschrittsanzeige eingebaut, dazu muss ich ermitteln wieviele Dateien umzubenennen sind.

 DirectoryInfo dir = new DirectoryInfo(textBox1.Text);
 char[] charSeparators = new char[] {','};
 string[] fileExtensions = txtExtensions.Text.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);

 ...

 // Statusbar maximum festlegen
 int pBarMax = 1;
 foreach (FileInfo info in dir.GetFiles()) {
 foreach (string ext in fileExtensions) {
 if (info.Extension.ToLower().Substring(1).Equals(ext)) {
 pBarMax++;
 }
 }
 }
 pbar.Maximum = pBarMax;

 ...

 foreach (string ext in fileExtensions) {
 FileInfo[] files = dir.GetFiles("\*." + ext, SearchOption.TopDirectoryOnly);
 Array.Sort(files, new CompareFilesByDateCreated());
 int index = 0;
 foreach (FileInfo file in files) {

 ...

Ich ermittle erstmal wieviele Dateien für die Umbenennung relevant sind um dann für die Progressbar den Maximalwert zu setzen. Später muss ich aber für jede Extension nochmal die Dateien einlesen.
Ich suche eine Möglichkeit, die Anzahl Dateien ohne Schleife festzustellen, also sowas wie

dir.GetFiles("\*.jpg,\*.avi");

Ich habe schon im Internet gesucht, angeblich geht sowas nicht. Kennt jemand eine einfache Lösung um die doppelten Schleifen zum umgehen?

Noch eine andere Frage. Wenn ich das Programm erstelle wird eine setup.exe angelegt und das eigentliche Programm befindet sich in einem Unterordner. Kann ich beim Erstellen nicht einfach sagen, dass nur die Programmdatei angelegt werden soll und sonst nichts?

Gruß, Bernd

Ich ermittle erstmal wieviele Dateien für die Umbenennung
relevant sind um dann für die Progressbar den Maximalwert zu
setzen. Später muss ich aber für jede Extension nochmal die
Dateien einlesen.
Ich suche eine Möglichkeit, die Anzahl Dateien ohne Schleife
festzustellen, also sowas wie

dir.GetFiles("*.jpg,*.avi");

Ich habe schon im Internet gesucht, angeblich geht sowas
nicht. Kennt jemand eine einfache Lösung um die doppelten
Schleifen zum umgehen?

Vielleicht sowas:

List files = new List();
foreach (string ext in extensions)
 files.AddRange(Directory.GetFiles(dir, "\*."+ext));
 
progressBar.Maximum = files.Count;

Noch eine andere Frage. Wenn ich das Programm erstelle wird
eine setup.exe angelegt und das eigentliche Programm befindet
sich in einem Unterordner. Kann ich beim Erstellen nicht
einfach sagen, dass nur die Programmdatei angelegt werden soll
und sonst nichts?

Wenn eine setup.exe angelegt wird, dann hast Du auch noch ein Deployment-Projekt in der Projektmappe und genau das baust Du dann.
Das ist dann der Unterschied zwischen dem Erstellen eines Projekts und der ganzen Projektmappe.

Gruß, Bernd

Gruß,
Martin