|
.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 記事ランキング
本日
月間