Csharp/C#教程:有一种简单的方法可以在C#中组合两个相对路径吗?分享


有一种简单的方法可以在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将合并并简化生成的路径。

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

上述就是C#学习教程:有一种简单的方法可以在C#中组合两个相对路径吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1037476.html

(0)
上一篇 2022年1月25日
下一篇 2022年1月25日

精彩推荐