|   | 
 
|  
 .NET TIPS 
ディレクトリが空かどうかを調べるには?[C#、VB]
デジタルアドバンテージ 遠藤 孝信 
2007/09/27 | 
  | 
 
 
 
 | 
 .NETのクラス・ライブラリでは、ディレクトリに関するユーティリティ的な機能(メソッド)は主にDirectoryクラス(System.IO名前空間)に集められているが、あるディレクトリが空かどうかを調べるような機能は用意されていない。
 ディレクトリが空かどうかを調べるには、そのディレクトリにサブ・ディレクトリやファイルが存在するかどうかを調べるのが最も妥当な方法であるが、これにはDirectoryクラスのGetFileSystemEntriesメソッドが利用できる。Directoryクラスにはファイルあるいはディレクトリを列挙するGetFilesメソッド/GetDirectoriesメソッドもあるが、GetFileSystemEntriesメソッドはディレクトリとファイルを区別せずに列挙できるメソッドであり、それらの名前を文字列の配列として返す。
 以下のコードは、ディレクトリが空かどうかを調べるIsEmptyDirectoryメソッドの実装と、それを利用してCドライブにあるすべての空ディレクトリを列挙するサンプル・プログラムである。
 
// emptydir.cs 
 
using System; 
using System.IO; 
 
class SearchEmptyDir { 
 
  public static bool IsEmptyDirectory(string dir) { 
    if (!Directory.Exists(dir)) { 
      // ディレクトリが存在しなければ空でないとする 
      return false; 
    } 
    try { 
      string[] entries = Directory.GetFileSystemEntries(dir); 
      return entries.Length == 0; 
    } catch { 
      // アクセス権がないなどの場合は空でないとする 
      return false; 
    } 
  } 
 
  static void Main() { 
    search(@"c:\"); 
  } 
 
  static void search(string path) { 
    if (IsEmptyDirectory(path)) { 
      Console.WriteLine(path); // 空のディレクトリを画面表示 
      return; 
    } 
    try { 
      foreach (string dir in Directory.GetDirectories(path)) { 
        search(dir); 
      } 
    } catch {} 
  } 
} 
 
// コンパイル方法:csc emptydir.cs 
 | 
 
 
 | 
| 空のディレクトリを列挙するC#のサンプル・プログラム(emptydir.cs) | 
 | 
 
' emptydir.vb 
 
Imports System 
Imports System.IO 
 
Class SearchEmptyDir 
 
  Public Shared Function IsEmptyDirectory(ByVal dir As String) As Boolean 
    If Not Directory.Exists(dir) 
      ' ディレクトリが存在しなければ空でないとする 
      Return False 
    End If 
    Try 
      Dim entries As string() = Directory.GetFileSystemEntries(dir) 
      Return entries.Length = 0 
    Catch 
      ' アクセス権がないなどの場合は空でないとする 
      Return False 
    End Try 
  End Function 
 
  Shared Sub Main() 
    search("c:\") 
  End Sub 
 
  Shared Sub search(ByVal path As String) 
    If IsEmptyDirectory(path) 
      Console.WriteLine(path) ' 空のディレクトリを画面表示 
      Return 
    End If 
    Try 
      For Each dir As String in Directory.GetDirectories(path) 
        search(dir) 
      Next 
    Catch 
    End Try 
  End Sub 
End Class 
 
' コンパイル方法:vbc emptydir.vb 
 | 
 
 
 | 
| 空のディレクトリを列挙するVBのサンプル・プログラム(emptydir.vb) | 
 | 
 なお、このIsEmptyDirectoryメソッドでは、チェックすべきディレクトリが存在しない場合や、ディレクトリへのアクセス権がないなどの理由でGetFileSystemEntriesメソッドが失敗する場合には、ディレクトリは空でないという判断を行っている。
 
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル 
使用ライブラリ:Directoryクラス(System.IO名前空間)
 | 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間