vb.net找到公共父目录

时间:2012-09-21 00:34:04

标签: vb.net search directory

对于文件列表,我正在尝试确定公共父目录。这些文件将不在同一目录中(测试该部分)......我正在尝试

Dim myParentDirectory As String = Path.GetDirectoryName(list.Item(0))
Dim myCurrentDirectory As String
For Each file in list
  myCurrentDirectory = Path.GetDirectoryName(file)
  While myCurrentDirectory <> myParentDirectory And...  And myParentDirectory <> Nothing '(or <> to a top level directory like "c:")
   myParentDirectory = Directory.GetParent(myParentDirectory.ToString())
  End While
Next

...代表“myCurrentDirectory不是myParentDirectory的子目录”,但我没有找到任何测试 - 只列出目录内容的方法。

如何获取两个文件(或目录)的公共目录父级?

1 个答案:

答案 0 :(得分:1)

我有一个有效的解决方案。

首先定义一个递归函数,该函数可以获取给定文件夹的所有祖先文件夹的列表:

Dim recurse As Func(Of DirectoryInfo, IEnumerable(Of string)) = Nothing
recurse = _
    Function (di)
        If di Is Nothing Then
            Return Enumerable.Empty(Of String)()
        Else
            Return Enumerable.Repeat(di.FullName, 1).Concat(recurse(di.Parent))
        End If
    End Function

然后,这只是获得两组这样的路径并返回最长路径的问题。

像这样:

Dim di1 As new DirectoryInfo("E:\James\Media\Podcasts\TEDTalks (video)")
Dim di2 As new DirectoryInfo("E:\James\Media\Music\A Clash of Kings")

Dim result =
    recurse(di1) _
        .Intersect(recurse(di2)) _
        .OrderByDescending(Function (x) x.Length) _
        .First()

Console.WriteLine(result)

结果是“E:\ James \ Media”。

可能有更漂亮的版本,但它有效。