Feedback

C# - Standarddateinamen ermitteln

Veröffentlicht von am 06.07.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.

2 Kommentare zum Snippet

...lypô schrieb am 23.11.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 27.11.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...
 

Logge dich ein, um hier zu kommentieren!