Umbenennung von Dateien



  • Ich möchte alle Bilddateien in einem Ordner mit einem neuen Namen und fortlaufender Nummerierung versehen, also: 'name_xxx.jpg'
    Es funktioniert auch, aber es wird vor dem Dateinamen immer ein Leerzeichen erzeugt. Woher kommt das und wie kann ich es entfernen?
    Wenn ich einfach das erste Zeichen entferne, bringt Move() einen Fehler, weil die Datei-Namen identisch sind.

    // Die Datei-Pfade sind im String-Array 'feld' hinterlegt
    for (int i=0; i<feld.Length; i++)
    {
        var fileInfo = new FileInfo(feld[i]);
        // damit die Nummer immer dreistellig dargestellt wird
        if(i<10) { nullen = "00"; }
        else if(i<100) { nullen = "0"; }
        else { nullen = ""; }
        // erzeugen des neuen Namens
        string dateiname = "Bild_" + nullen + (i+1) + ".jpg";
        File.Move(feld[i], fileInfo.Directory.ToString() + "\\" + dateiname);
    }
    


  • Kein Plan was du da treibst, aber es geht viel einfacher:

    string dir = @"D:\Test";
    var filePaths = Directory.GetFiles(dir);
    int fileIndex = 0;
    foreach (string filePath in filePaths) {
        string newFileName = String.Format("Bild_{0:000}.jpg", fileIndex++);
        File.Move(filePath, Path.Combine(dir, newFileName));
    }
    


  • In dem Ordner können unter Umständen auf andere Dateitypen sein. Um eine AUswahl aller jpg's zu erreichen, habe ich mir mit

    Directory.GetFiles(pfad, "*.jpg");
    

    ein String-Array erzeugt

    Muss ich bei der anderen Funktion var also erst in string konvertieren und die letzten vor Zeichen testen, ob es sich um ".jpg" handelt?



  • Nein, einfach auch den Filter beim Aufruf von GetFiles anwenden. Die Variable "filePaths" ist im Übrigen auch ein String-Array. Nur steht das nicht explizit da, sondern wird vom Compiler automatisch aus dem Rückgabetyp von GetFiles abgeleitet.



  • Vielen Dank für deine Hilfe!

    Ich habe seither nie mit 'var' programmiert sondern immer nur mit festen Typen oder eigenen Klassen


Anmelden zum Antworten