こんにちは。
今、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もろとも削除できれば一番いいです。)
このようなことを自動的に行うにはどのようにすればよいか、ご教示頂けませんでしょうか。
よろしくお願いいたします。
下記の 「VB.NET Tips一覧」 の中の「フォルダ関係」の
中の幾つかを組み合わせれば出来ると思います。 お試しあれ!
http://hanatyan.sakura.ne.jp/dotnet/index.html
他のサンプルコードが掲載されているHPも色々とあるでしょう。
http://hiros-dot.net/VBNET2005/FileMenu.htm など
『ファイルもディレクトリも存在しない』というディレクトリまで辿り、
それを上位に向かって再帰的に削除してみては如何でしょう。
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
師走さま、魔界の仮面弁士さま、ありがとうございました。
今回の問題の解決のみならず、再帰の勉強もできました。
今後ともよろしくお願いします。
解決を忘れました...
ツイート | ![]() |