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のサブディレクトリではありません」の略ですが、テストするものは何も見つかりませんでした。ディレクトリの内容を一覧表示するメソッドのみです。

2つのファイル(またはディレクトリ)の共通ディレクトリの親を取得するにはどうすればよいですか?

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

次に、そのような2つのパスのセットの交差を取得し、最長のパスを返すだけです。

このような:

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 に答える