有一种简单的方法可以在C#中组合两个相对路径吗?

我想在C#中组合两个相对路径。

例如:

string path1 = "/System/Configuration/Panels/Alpha"; string path2 = "Panels/Alpha/Data"; 

我想回来

 string result = "/System/Configuration/Panels/Alpha/Data"; 

我可以通过拆分第二个数组并在for循环中比较它来实现这一点,但我想知道是否有类似于Path.Combine东西可用或者是否可以用正则表达式或Linq完成?

谢谢

如果两个字符串的格式始终与示例中的格式相同,则应该可以:

 string path1 = "/System/Configuration/Panels/Alpha"; string path2 = "Panels/Alpha/Data"; var x = path1.Split('/'); var y = path2.Split('/'); string result = Enumerable.Range(0, x.Count()) .Where(i => x.Skip(i) .SequenceEqual(y.Take(x.Skip(i) .Count()))) .Select(i => string.Join("/", x.Take(i) .Concat(y))) .LastOrDefault(); // result == "/System/Configuration/Panels/Alpha/Data" 

对于path1 = "/System/a/b/a/b"path2 = "a/b/a/b/c" ,结果为"/System/a/b/a/b/a/b/c" 。 您可以将LastOrDefault更改为FirstOrDefault以获取"/System/a/b/a/b/c"


注意,该算法基本上创建了两个路径的所有可能组合,并且不是特别有效。

我认为这需要先验知识,某些文件夹是相同的,你不能从路径中安全地推断出来(假设它不是绝对的)。

您必须自己编写一些自定义逻辑来组合这些路径。

试试这个…

 var p1 = path1.Split('/'); var p2 = path2.Split('/'); result = p1.Union(p1); 

它使用System.Linq,可以很容易地打包成扩展方法。

当然,它假设了一些关于path1和path2的值。

Path.GetFullPath(Path.Combine(path1,path2))

GetFullPath将合并并简化生成的路径。

编辑:没关系,这只适用于绝对路径……