删除字符串的末尾并将其与另一个字符串合并

时间:2017-08-02 10:24:56

标签: c# string

我有两个字符串:

  1. C:\ folder1 \ folder2 \ folder3

  2. folder3 \ folder4 \ file1.jpg

  3. 我想将两个字符串组合在一起以提供完整的文件路径,但在使用时:

    char[] charsToTrim = {'\\'};
    var rootPathEdit = treeViewPath.TrimStart(charsToTrim);
    

    它不起作用,你能给我任何提示吗?

    编辑:

    抱歉,我意识到这不是很清楚,我想要结合的结果:

    1. C:\ folder1 \ folder2 \ folder3

    2. folder3 \ folder4 \ file1.jpg

    3. 是: C:\ folder1中\文件夹2 \ folder3 \ folder4 \ file1.jpg

      因为文件路径的两半我在末尾重叠并开始。

3 个答案:

答案 0 :(得分:3)

使用Path.Combine进行路径连接。

var finalPath = Path.Combine(firstPath, secondPath);

编辑:

由于真正的问题(在原始帖子中没有非常清楚地定义)是重复文件夹,它存在于两个路径中,这是删除额外文件夹的一种方法:

var start = @"C:\folder1\folder2\folder3";
var end = @"folder3\folder4\file1.jpg";

var startArr = start.Split('\\');
var endArr = end.Split('\\');

var duplicateFolders = startArr.Intersect(endArr);
var final = Path.Combine(startArr.Concat(endArr.Except(duplicateFolders)).ToArray());

//... and some fix (because final path doesn't have backslash after :
final = final.Replace(":", @":\");

答案 1 :(得分:2)

不要对此使用字符串操作,因为有更好的方法,字符串操作不像下面的代码那样是故障安全的。

使用Directory.GetParent从第一个路径获取父级(因为您在标题中说明要删除第一个字符串的结尾)。如果您不想,请跳过此部分。

var firstPath = Directory.GetParent(@"C:\folder1\folder2\folder3").ToString();
var secondPath = @"folder3\folder4\file1.jpg";

然后使用Path.Combine组合两个路径。

var result = Path.Combine(firstPath, secondPath);

或当其中一个路径是相对路径时,您应该使用

var finalResult = Path.GetFullPath(result);

答案 2 :(得分:1)

这是一个可以探索的途径。

基本上你将两个字符串分开\,然后比较第一个字符串的最后一个元素和最后一个字符串的第一个元素。 如果它们完全相同,请删除其中一个。

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var start = @"C:\folder1\folder2\folder3";
        var end = @"folder3\folder4\file1.jpg";

        var startArray = start.Split('\\');
        var endArray = end.Split('\\');

        var final = Path.Combine(start, end);
        var endOfStart = startArray.LastOrDefault();
        if (endOfStart  == endArray.FirstOrDefault())
        {
            final = Path.Combine(start.Substring(0, start.Length - (endOfStart ?? "").Length), end);
        }

        Console.WriteLine(final);
        Console.ReadLine();

    }
}