指定したディレクトリ配下のサブディレクトリにファイルが存在しない場合、そのサブディレクトリを削除するには?

解決


りょう  2009-12-08 10:52:11  No: 146645  IP: 192.*.*.*

こんにちは。
今、VB2008でファイル操作等の勉強を行っています。
例えば、Testというフォルダがあり、以下のようなディレクトリ構造になっているとします。
Test
  ┣Dir1
  ┃  ┣Dir2
  ┃  ┃  ┗test1.txt
  ┃  ┣Dir3
  ┃  ┗Dir4
  ┃    ┗Dir5
  ┗Dir6
      ┗test2.txt
ここで、Dir1〜Dir6はTestのサブフォルダとし、test1.txtとtest2.txtは任意のファイルとします。
やりたいことは、指定したフォルダ(ここではTestフォルダ)内のサブフォルダを自動的に調べ、
対象サブフォルダのうち、ファイルがないフォルダを自動的に削除するプログラムを作成したいのですが、
上の例でいうと、フォルダ内にファイルのないDir3とDir5はもちろんのこと、
配下にファイルが存在しないDir4も自動的に削除したいのです。
(この場合は、Dir4をDir5もろとも削除できれば一番いいです。)
このようなことを自動的に行うにはどのようにすればよいか、ご教示頂けませんでしょうか。
よろしくお願いいたします。

編集 削除
師走  2009-12-08 12:42:36  No: 146646  IP: 192.*.*.*

下記の  「VB.NET Tips一覧」  の中の「フォルダ関係」の
中の幾つかを組み合わせれば出来ると思います。  お試しあれ!

http://hanatyan.sakura.ne.jp/dotnet/index.html

他のサンプルコードが掲載されているHPも色々とあるでしょう。

http://hiros-dot.net/VBNET2005/FileMenu.htm    など

編集 削除
魔界の仮面弁士  2009-12-08 13:05:53  No: 146647  IP: 192.*.*.*

『ファイルもディレクトリも存在しない』というディレクトリまで辿り、
それを上位に向かって再帰的に削除してみては如何でしょう。

Imports System.IO
Module Module1

    Sub Main()
        RemoveEmptyDirectories("C:\Test")
    End Sub

    Public Sub RemoveEmptyDirectories(ByVal baseDirectory As String)
        Array.ForEach(Directory.GetDirectories(baseDirectory), AddressOf RemoveEmptyDirectories)
        If Directory.GetFiles(baseDirectory).Length = 0 AndAlso Directory.GetDirectories(baseDirectory).Length = 0 Then
            Debug.Print("{0:HH:mm:ss.ffff yyyy/MM/dd}, DELETE ""{1}""", Now(), baseDirectory)
            Directory.Delete(baseDirectory)
        End If
    End Sub

End Module

編集 削除
りょう  2009-12-08 13:34:54  No: 146648  IP: 192.*.*.*

師走さま、魔界の仮面弁士さま、ありがとうございました。
今回の問題の解決のみならず、再帰の勉強もできました。
今後ともよろしくお願いします。

編集 削除
りょう  2009-12-08 15:51:19  No: 146649  IP: 192.*.*.*

解決を忘れました...

編集 削除