DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

フォルダが空か調べる

ここでは、指定したフォルダ(ディレクトリ)内にファイルやフォルダが存在するか調べる方法を紹介します。

Directory.EnumerateFileSystemEntriesメソッドを使用する方法

Directory.EnumerateFileSystemEntriesメソッドを使用すると、フォルダ内にあるファイルとフォルダを列挙することができます。このメソッドを使えば、指定したフォルダにファイルとフォルダが一つもないことを確認することができます。

フォルダ内にファイルがあるかだけ調べたいのであればEnumerateFilesメソッドを、サブフォルダがあるかだけを調べたいのであればEnumerateDirectoriesメソッドを使うことができます。

これらのメソッドは、.NET Framework 4.0以降で使用できます。

以下に、Directory.EnumerateFileSystemEntriesメソッドを使用してフォルダが空かを調べるサンプルを示します。

VB.NET
コードを隠すコードを選択
'Imports System.Collections.Generic
'Imports System.Linq

'空かどうか確かめたいフォルダ
Dim dir As String = "C:\test"

'フォルダ内にファイルかフォルダがあるか調べる
If System.IO.Directory.EnumerateFileSystemEntries(dir).Any() Then
    Console.WriteLine("フォルダは空ではありません。")
Else
    Console.WriteLine("フォルダは空です。")
End If
C#
コードを隠すコードを選択
//using System.Collections.Generic;
//using System.Linq;

//空かどうか確かめたいフォルダ
string dir = @"C:\test";

//フォルダ内にファイルかフォルダがあるか調べる
if (System.IO.Directory.EnumerateFileSystemEntries(dir).Any())
{
    Console.WriteLine("フォルダは空ではありません。");
}
else
{
    Console.WriteLine("フォルダは空です。");
}

Directory.GetFileSystemEntriesメソッドを使用する方法

Directory.EnumerateFileSystemEntriesメソッドが使用できない場合は、代わりにDirectory.GetFileSystemEntriesメソッドを使用して同様のことができます。

ただし、GetFileSystemEntriesメソッドは、指定したフォルダにあるすべてのファイルとフォルダを一度に取得するため、大量のファイルがフォルダ内にあると、とても時間がかかってしまいます。そのため、この方法はあまり良い方法とは言えません。先に紹介したEnumerateFileSystemEntriesメソッドはこのようなことがありませんので、できればEnumerateFileSystemEntriesメソッドを使うべきです。

以下に示すサンプルでは、GetFileSystemEntriesメソッドの代わりに、Directory.GetDirectoriesメソッドDirectory.GetFilesメソッドを使用しています。これは、サブフォルダとファイルを分けて調べることで、少しでも処理が早く済むようにしています。

VB.NET
コードを隠すコードを選択
''' <summary>
''' 指定したフォルダが空かどうか調べる。
''' </summary>
''' <param name="dir">フォルダのパス。</param>
''' <returns>空の場合は、True。それ以外は、False。</returns>
Public Shared Function IsDirectoryEmpty(dir As String) As Boolean
    'フォルダ内にサブフォルダがあるか調べる
    If 0 < System.IO.Directory.GetDirectories(dir).Length Then
        Return False
    End If
    'フォルダ内にファイルがあるか調べる
    If 0 < System.IO.Directory.GetFiles(dir).Length Then
        Return False
    End If
    Return True
End Function
C#
コードを隠すコードを選択
/// <summary>
/// 指定したフォルダが空かどうか調べる。
/// </summary>
/// <param name="dir">フォルダのパス。</param>
/// <returns>空の場合は、True。それ以外は、False。</returns>
public static bool IsDirectoryEmpty(string dir)
{
    //フォルダ内にサブフォルダがあるか調べる
    if (0 < System.IO.Directory.GetDirectories(dir).Length)
    {
        return false;
    }
    //フォルダ内にファイルがあるか調べる
    if (0 < System.IO.Directory.GetFiles(dir).Length)
    {
        return false;
    }
    return true;
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。