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

时间:2014-03-26 19:27:41

标签: c# .net windows path

我正在尝试确定一条路径是否是另一条路径的子路径。

我已经尝试过:

if (Path.GetFullPath(A).StartsWith(Path.GetFullPath(B)) ||
    Path.GetFullPath(B).StartsWith(Path.GetFullPath(A)))
   { /* ... do your magic ... */ }

How to check if one path is a child of another path?帖子中

但它不起作用。例如,如果我写“C:\ files”和“C:\ files baaa”,代码认为“C:\ files baaa”是“C:\ files”的子代,当它不是时,它是只有C:。 当我尝试使用长路径时,问题非常严重。有很多孩子。

我也试过“如果包含”......但仍然没有真正在所有的追逐中工作

我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:4)

试试这个:

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 ... */ }

答案 1 :(得分:2)

C:\files不是File,而是Directory。所以你可以试试这个:

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

答案 2 :(得分:0)

我需要知道文件夹B是否与文件夹A中包含的OR相同。

以下内容对我有用:

virtual