.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メソッドが失敗する場合には、ディレクトリは空でないという判断を行っている。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ:Directoryクラス(System.IO名前空間)

この記事と関連性の高い別の.NET TIPS
ディレクトリを作成/削除/リネーム/移動するには?
ファイルやディレクトリの一覧を効率的に取得するには?
ファイルやディレクトリをすべてのサブディレクトリから検索するには?
ファイルやディレクトリの一覧を取得するには?
ファイルやディレクトリの存在を確認するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間