1

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

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 的子目录”,但我没有找到任何可以测试的东西——只有列出目录内容的方法。

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

4

1 回答 1

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”。

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

于 2012-09-21T00:52:46.157 回答