Die Ausgabe zeigt, dass die Pfadnormalisierung auf einem UNIX-ähnlichen Dateisystem läuft, was zu einer falschen Interpretation der Pfade führt. Offensichtlich werden die Backslashes (\) nicht korrekt behandelt und in / umgewandelt.
Das Problem liegt darin, dass Path.GetFullPath in Ihrer Umgebung den Pfad relativ zur aktuellen Arbeitsumgebung interpretiert. Wenn Sie auf einer Plattform wie Linux/Unix arbeiten (z. B. unter .NET Core auf Docker), funktioniert Path.GetFullPath nicht korrekt mit UNC-Pfaden.
Hier ist eine plattformunabhängige Lösung, die explizit mit UNC-Pfaden arbeitet, ohne sich auf die Standard-Dateipfadmethoden zu verlassen.
using System;
class Program
{
static void Main()
{
// Beispiel Share-Pfad
string sharePath = @"\\fileserver\gbi";
// Beispiel aktueller Pfad
string currentPath = @"\\fileserver\gbi\berechtigungsaudit";
try
{
// Ordnertiefe berechnen
int depth = GetFolderDepth(sharePath, currentPath);
Console.WriteLine($"Ordnertiefe abzüglich Sharepfad: {depth}");
}
catch (ArgumentException ex)
{
Console.WriteLine($"Fehler: {ex.Message}");
}
}
static int GetFolderDepth(string sharePath, string currentPath)
{
// Normalisieren der Pfade: Entfernen überflüssiger Backslashes und Vereinheitlichung
string normalizedSharePath = NormalizeUNCPath(sharePath);
string normalizedCurrentPath = NormalizeUNCPath(currentPath);
// Debugging: Zeige normalisierte Pfade an
Console.WriteLine($"Normalisierter Share-Pfad: {normalizedSharePath}");
Console.WriteLine($"Normalisierter aktueller Pfad: {normalizedCurrentPath}");
// Prüfen, ob der aktuelle Pfad innerhalb des Share-Pfads liegt
if (!normalizedCurrentPath.StartsWith(normalizedSharePath))
{
throw new ArgumentException("Der aktuelle Pfad liegt nicht innerhalb des Share-Pfads.");
}
// Relativen Pfad ermitteln
string relativePath = normalizedCurrentPath.Substring(normalizedSharePath.Length).TrimStart('\\');
// Ordnertiefe berechnen
return relativePath.Split('\\', StringSplitOptions.RemoveEmptyEntries).Length;
}
static string NormalizeUNCPath(string path)
{
// Trimme Leerzeichen und entferne abschließende Backslashes
return path.Trim().TrimEnd('\\') + '\\';
}
}