如何从另一条路径中删除部分路径?

时间:2014-08-15 08:27:10

标签: c#

我有两个这样的文件路径:

var path1 = "c:\dir\anotherdir";
var path2 = "c:\dir\anotherdir\yetanotherdir\dirception\file.zip";
var result = path2 - path1; //Wanted result: yetanotherdir\dirception\file.zip

我需要做的是采取路径1和"删除"它来自path2。

现在最简单的解决方案就是简单地使用substr或者其他东西,然后简单地从" text"中删除path2中的path1。办法。但我宁愿在c#中使用一些实际的内置函数来处理这个问题。

我试过了:

var result = (new Uri(path1)).MakeRelativeUri(path2);

预期结果:yetanotherdir \ dirception \ file.zip

实际结果:anotherdir \ yetanotherdir \ dirception \ file.zip

那么实现目标的最佳方法是什么?

5 个答案:

答案 0 :(得分:1)

Path.GetFullPathString.StartsWithString.Substring应足够可靠:

string path1 = @"c:\dir\anotherdir";
string path2 = @"c:\dir\anotherdir\yetanotherdir\dirception\file.zip";
string fullPath1 = Path.GetFullPath(path1);
string fullPath2 = Path.GetFullPath(path2);
if (fullPath2.StartsWith(fullPath1, StringComparison.CurrentCultureIgnoreCase))
{
    string result = fullPath2.Substring(fullPath1.Length).TrimStart(Path.DirectorySeparatorChar);
    // yetanotherdir\dirception\file.zip
}

答案 1 :(得分:0)

您可以将其替换出来

var result = path2.Replace(path1+"/","");

答案 2 :(得分:0)

var path1 = @"c:\dir\anotherdir";
var path2 = @"c:\dir\anotherdir\yetanotherdir\dirception\file.zip";
var path3 = path2.Replace(path1,""); // Will hold : \yetanotherdir\dirception\file.zip

如果需要,您可以删除第一个\。 但出于好奇,为什么你不想要路径的前缀?

答案 3 :(得分:0)

如果在path1的末尾添加额外的路径分隔符char,则它变为:

var path1 = "c:\dir\anotherdir\";

然后以下内容应该有效:

var result = (new Uri(path1)).MakeRelativeUri(new Uri(path2));

答案 4 :(得分:0)

  var result = path2.replace(path1 + "\\", "")

这项工作对我来说是python。