如何在C#中有效地检查一条路径是否是另一条路径的子路径?

如何在C#中有效地检查一条路径是否是另一条路径的子路径?,c#,.net,windows,path,C#,.net,Windows,Path,我试图确定一条路径是否是另一条路径的子路径 我已经试过了: if (Path.GetFullPath(A).StartsWith(Path.GetFullPath(B)) || Path.GetFullPath(B).StartsWith(Path.GetFullPath(A))) { /* ... do your magic ... */ } 像在邮局一样 但它不起作用。例如,如果我写“C:\files”和“C:\files-baaa”,代码会认为“C:\files-baaa”

我试图确定一条路径是否是另一条路径的子路径

我已经试过了:

if (Path.GetFullPath(A).StartsWith(Path.GetFullPath(B)) ||
    Path.GetFullPath(B).StartsWith(Path.GetFullPath(A)))
   { /* ... do your magic ... */ }
像在邮局一样

但它不起作用。例如,如果我写“C:\files”和“C:\files-baaa”,代码会认为“C:\files-baaa”是“C:\files”的子项,而不是,它只是C:。 当我尝试长途跋涉时,问题真的很严重,有很多孩子

我还尝试了“如果包含\”。。。但在所有的追逐中仍然不起作用

我能做什么

谢谢

试试这个:

if (!Path.GetFullPath(A).TrimEnd(Path.DirectorySeparatorChar).Equals(Path.GetFullPath(B).TrimEnd(Path.DirectorySeparatorChar), StringComparison.CurrentCultureIgnoreCase)
    && (Path.GetFullPath(A).StartsWith(Path.GetFullPath(B) + Path.DirectorySeparatorChar, StringComparison.CurrentCultureIgnoreCase)
    || Path.GetFullPath(B).StartsWith(Path.GetFullPath(A) + Path.DirectorySeparatorChar, StringComparison.CurrentCultureIgnoreCase)))
   { /* ... do your magic ... */ }

C:\files
不是
文件
,而是
目录
。因此,您可以尝试以下操作:

DirectoryInfo A = new DirectoryInfo(Path.GetFullPath("firstPath"));
DirectoryInfo B = new DirectoryInfo(Path.GetFullPath("secondPath"));

if( B.Parent.FullName == A.FullName || A.Parent.FullName == B.FullName )
如果您不寻求直接的父子关系,您可以尝试:

if (Directory
    .GetDirectories(A.FullName,"*",SearchOption.AllDirectories)
    .Contains(B.FullName) ||

     Directory
    .GetDirectories(B.FullName, "*", SearchOption.AllDirectories)
    .Contains(A.FullName))

我需要知道文件夹B是否与文件夹A相同或包含在其中

以下几点对我很有用:

if (A.FullName.Contains(B.FullName))
{
// Path A is equal to or contained within path B. (B is a child of A)
}

谢谢我尝试了Path.GetFullPath(listBoxItem.ToString())+“\\”)并且似乎可以工作。如果B~=A,这不是会返回true吗?i、 e.“C:\files”和“C:\files\\\”因为两者都指向同一个文件夹,我相信在上面的代码中会求值为true?是的,如果A和B指向同一个文件夹
true
,则会返回。通过检查其完整路径的相等性很容易避免。我要更新样本。谢谢。在我的代码中,我要做的第一件事是删除路径末尾的“\\”,将“/”转换为“\”和其他类似的检查。代码对我有用,但是如果你想改进它,是的,你可以:D谢谢!你是说直接子代还是后代?“C:\files baaa”不是有效路径,所以我不确定我是否理解issue@Harrison为什么不呢?文件夹名称中不使用空格?:S@gitsitgo. 啊,明白了。谢谢你指出我的误解。