对于文件列表,我正在尝试确定公共父目录。这些文件将不在同一目录中(测试该部分)......我正在尝试
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的子目录”,但我没有找到任何测试 - 只列出目录内容的方法。
如何获取两个文件(或目录)的公共目录父级?
答案 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”。
可能有更漂亮的版本,但它有效。