有很多用于“追加绝对路径的相对路径”,但我需要相对于亲戚添加。
e.g:
Path1 = "Parent/Child/a.txt"
Path2 = "../Sibling/file.cs"
Result = "Parent/Sibling/file.cs"
尝试:
Directory.GetParent()
- 有效,但我找不到返回结果的方法(它只能返回绝对路径)Path.Combine()
- 仅适用于简单案例和绝对路径。使用相对路径的“..”失败(严重!)...编写一个字符串标记化的Path类来解决这个问题似乎很荒谬,但是我一直在挖掘MSDN文档,似乎无法找到一个正确使用相对路径的工作路径/目录类
更糟糕的是......我正在努力让这项工作一直回到.NET 2(感谢Mono兼容性)
答案 0 :(得分:1)
我知道下面的代码很难看但会起作用(抱歉我还没有确认单声道):
var Result =
Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Path1), Path2))
.Substring(Directory.GetCurrentDirectory().Length + 1); // +1 to remove leading path separator
答案 1 :(得分:0)
我不确定你为什么说Path.Combine
失败,因为你没有提供任何你尝试过的例子。但Path.Combine
完全符合您的要求。在这种情况下你必须给它一些帮助;你的第一个路径是文件名,你需要目录。
var filePath1 = "Parent/Child/a.txt";
var filePath2 = "../Sibling/file.cs";
var baseDirectory = Path.GetDirectoryName(filePath1);
var result = Path.Combine(baseDirectory, filePath2);
这会返回"Parent\Child\../Sibling/file.cs"
而不是您要查找的"Parent/Sibling/file.cs"
,但这两条路径完全相同。
答案 2 :(得分:0)
我在Windows上试过它,它应该在Mac OS(Mono / Xamarin)或Linux(Mono)上运行,但你可能需要一个不同的dummyDriveLetter变量值。
static void Main(string[] args)
{
string Path1 = "Parent/Child/a.txt";
string Path2 = "../Sibling/file.cs";
string dummyDriveLetter = "C:/"; // must be an absolute path, so let's add a dummy prefix, works on Windows
string absolutePath1 = dummyDriveLetter + Path1;
var path1Uri = new Uri(absolutePath1, UriKind.Absolute);
var path2Uri = new Uri(Path2, UriKind.Relative);
var diff = new Uri(path1Uri, path2Uri);
string Result = diff.OriginalString.Replace(dummyDriveLetter, "");
Console.WriteLine(Result);
}