我正在尝试确定一条路径是否是另一条路径的子路径。
我已经尝试过:
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:。 当我尝试使用长路径时,问题非常严重。有很多孩子。
我也试过“如果包含”......但仍然没有真正在所有的追逐中工作
我该怎么办?
谢谢!
答案 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