Feedback

C# - Path.Combine mit unendlich vielen Segmenten

Veröffentlicht von am 16.05.2015
(0 Bewertungen)
System.IO.Path.Combine(string path1, string path2)


kann zwei Pfad-Segmente miteinander verbinden und kümmert sich auch ordentlich drum, wenn path1 (nicht) mit einem Backslash endet.

Hier ist ein Code-Schnipsel, der es erlaubt beliebig viele Segmente hintereinander zu schalten.
GFU-Schulungen  [Anzeige]

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

private static String GetPath(params String[] pathSegments)
{
    if ((pathSegments != null) && (pathSegments.Length > 0))
    {
        var path = Environment.ExpandEnvironmentVariables(pathSegments[0]);

        for (var i = 1; i < pathSegments.Length; i++)
        {
            var expanded = Environment.ExpandEnvironmentVariables(pathSegments[i]);

            path = Path.Combine(path, expanded);
        }

        return (path);
    }

    return (null);
}

private static void ShowPath(params String[] pathSegments)
{
    var path = GetPath(pathSegments);

    if (String.IsNullOrEmpty(path) == false)
    {
        Console.WriteLine(path);
        Console.WriteLine(Directory.Exists(path));
        var di = new DirectoryInfo(path);
        Console.WriteLine(di.FullName);
        Console.WriteLine(Directory.Exists(di.FullName));
        
        path = GetPath(path, "csc.exe");
        Console.WriteLine(path);
        Console.WriteLine(File.Exists(path));
        var fi = new FileInfo(path);
        Console.WriteLine(fi.FullName);
        Console.WriteLine(File.Exists(fi.FullName));
    }
    Console.WriteLine();
}

static void Main()
{
    ShowPath();
    ShowPath(null);
    ShowPath(@"C:\");
    ShowPath(@"C:\", "Windows", "Microsoft.NET", "Framework", "v2.0.50727");
    ShowPath(@"C:\Windows\Microsoft.NET\Framework", "v2.0.50727");
    ShowPath(@"C:\Windows\Microsoft.NET", @"Framework\v2.0.50727");
    ShowPath(@"C:\Windows\Microsoft.NET\", @"Framework\v2.0.50727");
    ShowPath(@"C:\Windows\Microsoft.NET\..\", @"Microsoft.NET\Framework\v2.0.50727");
    ShowPath("%WinDir%", @"Microsoft.NET\Framework\v2.0.50727");
    Console.ReadLine();
}
Abgelegt unter path.

3 Kommentare zum Snippet

Koopakiller schrieb am 16.05.2015:
Ab .NET 4.0 ist diese spezielle Überladung bereits in .NET integriert:
https://msdn.microsoft.com/en-us/library/dd991142(v=vs.110).aspx

Der Aufruf von Environment.ExpandEnvironmentVariables ist übrigens unnötig. Path.Combine macht das schon selbst.
us schrieb am 20.05.2015:
Der Aufruf von Environment.ExpandEnvironmentVariables ist nach meinen Feststellungen NICHT unnötig. Path.Combine macht das bei mir unter FW 4.5.1 leider NICHT selbständig.
Koopakiller schrieb am 20.05.2015:
Du hast wohl recht...ich habe es letzte Woche extra nochmal getestet, nur jetzt werden die Variablen auch nicht mehr aufgelöst :/
 

Logge dich ein, um hier zu kommentieren!