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