2017-08-02 20 views
0

合并它我有两个字符串:删除字符串的结束和另一个

  1. C:\文件夹1 \文件夹2 \ folder3

  2. folder3 \ folder4 \ file1.jpg

我想这两个字符串相结合,提供一个完整的文件路径,但使用时:

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

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

编辑:

对不起,我意识到这不是很清楚,我想结合的结果:

  1. C:\文件夹1 \文件夹2 \ folder3

  2. folder3 \ folder4 \ file1.jpg

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

因为文件路径的两半我在结尾和开始处有重叠。

+0

这是什么意思“它不工作”? –

+0

[Path.Combine绝对与相对路径字符串]可能的重复(https://stackoverflow.com/questions/670566/path-combine-absolute-with-relative-path-strings) – AndyJ

+1

@AndyJ在标题詹姆斯说他想要删除“字符串的结尾”。假设他希望#在他的路径中没有'folder3'两次合并,这不是重复的。但为此,我们需要詹姆斯的更多信息。 –

回答

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(); 

    } 
} 
+0

完美,这正是我想要实现的。 非常感谢+1 –

+0

@JamesMorrish,因为您的额外信息清除了问题出在额外的文件夹3中,我编辑了我的答案有点不同(如果更简单)的方法。 – Nino

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(":", @":\"); 
+0

请问为什么downvote? – Nino

+0

我没有DV,但我认为这是因为你正在回答一个应该被标记为重复的问题。 – AndyJ

+0

@AndyJ在我建议我的时候没有被标记为:) :) – Nino

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); 

为好。

+0

如果其中一个路径是相对的,那么您应该在[完整性](https://stackoverflow.com/a/16646701/69809)中包含'Path.GetFullPath'。 – Groo

+0

@格罗编辑我的答案,谢谢你的提示。 –

+0

嗨感谢您的回复 我是我遇到的问题是我有两个路径重叠。 第一个路径与第二个路径的起始位置具有相同的文件夹。 我想要的结果是:C \ folder1 \ folder2 \ folder3 \ folder4 \ file1.jpg 使用路径组合我得到:C \ folder1 \ folder2 \ folder3 \ folder3 \ folder4 \ file1.jpg –

相关问题