Feedback

C# - Standarddateinamen ermitteln

Veröffentlicht von am 7/6/2014
(1 Bewertungen)
Programme wie Word zeigen im Speichern-Dialog standardmäßig einen Namen wie "Dok1.docx" an. Wenn diese Datei in dem Ordner bereits existiert, wird als Name "Dok2.docx" verwendet.

Diese Methode ermittelt einen Dateinamen, nach dem selben Muster wie es Word und Co. tun.

Benötigte Namespaces
System
System.IO
/// <summary>
/// Ermittelt einen neuen Standarddateinamen.
/// </summary>
/// <param name="path">Der Pfad, wo die Datei gespeichert werden soll.</param>
/// <param name="document">Der Name der Datei, ohne Erweiterung und ohne hochzählbarer Zahl.</param>
/// <param name="extension">Die Erweiterung der Datei mit einem Punkt am Anfang.</param>
/// <returns>Der Pfad zu einer Datei, die den angegebenen Namen mit dem kleinsten noch nicht vergebenen Index trägt.</returns>
static string GetNewDocumentName(string path, string document, string extension)
{
    if (string.IsNullOrEmpty(path))
        throw new ArgumentNullException("path");
    if (string.IsNullOrEmpty(document))
        throw new ArgumentNullException("document");
    if (string.IsNullOrEmpty(extension))
        throw new ArgumentNullException("extension");

    int i = 1;
    string file;
    while (File.Exists(file = Path.Combine(path, document + i.ToString() + extension)))
        ++i;
    return file;
}
Abgelegt unter File, Filename, Speichern.

3 Kommentare zum Snippet

...lypô schrieb am 11/23/2018:
Genaugenommen müsstest Du noch prüfen, ob die Variable "extension" mit einem Punkt beginnt.
if (string.IsNullOrEmpty(extension) && !extension.StartsWith("."))...

Irgendwie so jedenfalls...

Ich habe es mit 'ner for-Schleife realisiert, da habe ich gleich noch den Indexer und eine Begrenzung - die allerdings hoch genug sein sollte.
Koopakiller schrieb am 11/27/2018:
Stimmt, könnte man auch mit prüfen. Mittlerweile würde ich die Extension vielleicht auch nullable lassen, sodass man auch Dateien ohne Erweiterung benutzen kann.

Mit einer for-Schleife geht es natürlich auch. Erfahrungsgemäß verstehen viele es aber nicht so schnell; bei for-Schleifen wird ein reines Zähl-Durchlaufen erwartet. Dass man die Begrenzung in einer for-Schleife sogar weg lassen kann wissen viele nicht mal...
...lypô schrieb am 12/16/2018:
Ich liiiebe for-Schleifen, weil sie eigentlich gleich alles mitbringen. Und in VS wird es nicht einmal als Warnung angezeigt, wenn dahinter nur ein Semikolon steht: Null-Befehl zum Durchzählen bis zu einem bestimmten Element - dann selbstredend mit externem Zähler:
for(i = start; i < max && i != Bedingung; i++);

Letzt sah ich eine fast leere for-Schleife:
for(;;){...}

Schnell geschrieben, sehr übersichtlich, gut.
 

Logge dich ein, um hier zu kommentieren!