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
GFU-Schulungen  [Anzeige]

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

/// <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 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...
...lypô schrieb am 16.12.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!