Autoincrement eines Strings

    • C#

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

      Autoincrement eines Strings

      Hallo,

      oft kommt es vor, dass beim Kopieren einer Datei festgestellt wird, dass der neue Dateiname schon existiert.
      Will man die Kopie trotzdem anlegen, wird oft eine aufsteigende Zahl an den Dateinamen gehängt.

      Hab hierfür mal eine Extension geschrieben, irgendwie Liebe ich Extensions.

      Hier mein Code

      C#-Quellcode

      1. /// <summary>
      2. /// AutoIncrement eines Strings z.b. meinString001, meinString002 usw.
      3. /// </summary>
      4. public static class AutoIncrementStringExtension
      5. {
      6. /// <summary>
      7. /// AutoIncrement eines Strings.
      8. /// Beim Kopieren einer Datei kann es vorkommen, dass diese schon existiert.
      9. /// Die Funktion hängt an das Ende des Strings oder Dateinamens eine Zahl an, welche hochgezählt wird.
      10. /// meinString001, meinString002 usw.
      11. /// </summary>
      12. /// <param name="value">String auf welchen AutoIncrement angewendet werden soll </param>
      13. /// <param name="isFile">Zeigt an ob es sich beim übergebenen String um einen Dateinamen handelt (True) oder nicht (False)</param>
      14. /// <returns>der fertige String</returns>
      15. public static string AutoIncrement(this string value, bool isFile = false)
      16. {
      17. string ext = isFile ? System.IO.Path.GetExtension(value) : string.Empty;
      18. string temp = isFile ? System.IO.Path.GetFileNameWithoutExtension(value) : value;
      19. int result = -1;
      20. int.TryParse(temp.Substring(temp.Length - 3, 3), out result);
      21. if (result == 0)
      22. {
      23. return string.Format(temp + "001{0}", isFile ? ext : string.Empty);
      24. }
      25. else
      26. {
      27. return string.Format("{0}{1:d3}{2}", temp.Substring(0, temp.Length - 3), result + 1, isFile ? ext : string.Empty);
      28. }
      29. }
      30. }


      Aufruf

      C#-Quellcode

      1. string neuerDateiname = alterDateiname.AutoIncrement(True);


      Viel Spaß

      mikeb69

      Beim Einfügen ist zwischen jede Zeile eine Leerzeile hinzugekommen. Ich habe das mal korrigiert. ~Thunderbolt

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

      @mikeb69 Gute Idee.
      Das Verhalten bei Dateiname und Pfadname ist unterschiedlich, die "007"s werden einmal vor und einmal nach der Exension eingefügt.
      Verbesserungsvorschlag:
      Wenn ich immer mit dem Startnamen reingehe, kommt immer die Namenserweiterung immer mit "001" zurück.
      Um das zu unterbinden, muss ich eine Klassenvariable anlegen, die sich den aktuellen Namen merkt.
      Ist es sinnvoll, stets mit dem Startnamen reinzugehen und das Programm sucht die höchste freie Erweiterung (damit nicht eine Lücke befüllt wird)?
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      @Thunderbolt,
      ​hab den Code direkt aus dem VisualStudio rauskopiert.
      ​Danke für's korrigieren.

      ​@'RodFromGermany',
      ​dachte ich hätte den Code ausgiebig getestet, wenn der Code Fehlerhaft ist korrigier ich den natürlich.
      ​Gute Idee

      Das geht natürlich wie Öl runter.

      ​Ist es sinnvoll, stets mit dem Startnamen reinzugehen und das Programm sucht die höchste freie Erweiterung (damit nicht eine Lücke befüllt wird)?

      Das war nicht der Ansatz.
      ​Ursprünglich gab es den Bedarf einen String eindeutig zu machen.
      ​Sieht man auch am Default bei den Übergabeparametern, das mit den Dateien ist mir erst im Nachgang eingefallen.

      Vielleicht sollte ich das noch ein wenig umstricken, denn die meisten werden wohl eher Bedarf am AutoIncrement bei Dateinamen haben.

      Gruss

      mikeb69