Hallo!
Ich suche möglichst eine API-Lösung für den Umgang mit relativen Pfaden. Ich möchte es vermeiden, mir eine eigene Lösung basteln zu müssen.
Ich möchte aus einem relativen Pfad zu einem anderen gegebenen Pfad einen absoluten Pfad machen.
Dabei ist die einfache Variante folgendes:
Pfad: C:\Test Relativer Teil: Test.xml Ergebnis: C:\Test\test.xml
Interessanter wird es aber bei:
Pfad: C.\Test Relativer Teil: ..\Test.xml Ergebnis: C:\Test.xml
Und die Krönung dazu ist:
Pfad: C:\Test Relativer Teil: ..\Files\Test.xml Ergebnis: C:\Files\test.xml
Gibt es hierfür irgendwas in der .NET API oder ist euch was anderes bekannt?
Die Suchfunktion hat dazu leider keine zufriedenstellende Lösung geliefert 🙁
Viele Grüße
alias5000
Linux is like a tipi: no gates, no windows and apache inside.
Path.Combine
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Das dachte ich auch, aber ich habe da mal die Mehode mit Variante 2 gefüttert und bekam nichts anderes, wie, wenn ich die Strings einfach aneinanderhängen würde (s1+s2).
Aufrug war in etwa so:
Path.Combine("C:\\Test", "..\\Test.ini");
Ergebnis:
C:\Test..\Test.ini
Gruß
alias5000
Linux is like a tipi: no gates, no windows and apache inside.
Hallo alias5000,
Path.GetFullPath (Path.Combine("C:\\Test", "..\\Test.ini"))
herbivore
Vielen Dank!
Gibt es für die umgekehrte Richtung auch was in der .NET-Kruschtelkiste?
Also von einem Absoluten Pfad zu einem relativen im Verhältnis zu einem anderen gegebenen Pfad
Linux is like a tipi: no gates, no windows and apache inside.
Hallo alias5000,
eine fertige Methode gibt es da vermutlich nicht, aber mit dem Methoden der Path-Klasse solltest du das hinbekommen.
herbivore
Hi zusammen,
hätte da evtl. was anzubieten:
string directory = Application.StartupPath;;
private string RelativePath(string relativeTo)
{
string absolutePath = directory;
string[] absoluteDirectories = absolutePath.Split('\\');
string[] relativeDirectories = relativeTo.Split('\\');
int length = absoluteDirectories.Length < relativeDirectories.Length ? absoluteDirectories.Length : relativeDirectories.Length;
int lastCommonRoot = -1;
int index;
for (index = 0; index < length; index++)
if (absoluteDirectories[index] == relativeDirectories[index])
lastCommonRoot = index;
else
break;
if (lastCommonRoot == -1)
{
MessageBox.Show("Das Programm befindet sich nicht auf dem selben Datenträger!\" + Path.GetPathRoot(absolutePath)+" & "+Path.GetPathRoot(relativeTo));
return relativeTo.ToString();
}
else
{
StringBuilder relativePath = new StringBuilder();
for (index = lastCommonRoot + 1; index < absoluteDirectories.Length; index++)
if (absoluteDirectories[index].Length > 0)
relativePath.Append("..\\");
for (index = lastCommonRoot + 1; index < relativeDirectories.Length - 1; index++)
relativePath.Append(relativeDirectories[index] + "\\");
relativePath.Append(relativeDirectories[relativeDirectories.Length - 1]);
return relativePath.ToString();
}
}
Bestimmt nicht der einfachste Weg, aber vielleicht hilft es ja ein bisschen.
EDIT:
@Golo Roden, stimmt habe die Diskussion darüber mal gelesen. thx
\ solltest Du eventuell durch den PathSeparatorChar ersetzen 😉
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
eine ähnliche Methode hatte ich aber nichtswissen heute vormittag schon selbst geschrieben.
Trotzdem danke 🙂!
Linux is like a tipi: no gates, no windows and apache inside.