ここでは、指定したフォルダ(ディレクトリ)内にファイルやフォルダが存在するか調べる方法を紹介します。
Directory.EnumerateFileSystemEntriesメソッドを使用すると、フォルダ内にあるファイルとフォルダを列挙することができます。このメソッドを使えば、指定したフォルダにファイルとフォルダが一つもないことを確認することができます。
フォルダ内にファイルがあるかだけ調べたいのであればEnumerateFilesメソッドを、サブフォルダがあるかだけを調べたいのであればEnumerateDirectoriesメソッドを使うことができます。
これらのメソッドは、.NET Framework 4.0以降で使用できます。
以下に、Directory.EnumerateFileSystemEntriesメソッドを使用してフォルダが空かを調べるサンプルを示します。
'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
//using System.Collections.Generic; //using System.Linq; //空かどうか確かめたいフォルダ string dir = @"C:\test"; //フォルダ内にファイルかフォルダがあるか調べる if (System.IO.Directory.EnumerateFileSystemEntries(dir).Any()) { Console.WriteLine("フォルダは空ではありません。"); } else { Console.WriteLine("フォルダは空です。"); }
Directory.EnumerateFileSystemEntriesメソッドが使用できない場合は、代わりにDirectory.GetFileSystemEntriesメソッドを使用して同様のことができます。
ただし、GetFileSystemEntriesメソッドは、指定したフォルダにあるすべてのファイルとフォルダを一度に取得するため、大量のファイルがフォルダ内にあると、とても時間がかかってしまいます。そのため、この方法はあまり良い方法とは言えません。先に紹介したEnumerateFileSystemEntriesメソッドはこのようなことがありませんので、できればEnumerateFileSystemEntriesメソッドを使うべきです。
以下に示すサンプルでは、GetFileSystemEntriesメソッドの代わりに、Directory.GetDirectoriesメソッドとDirectory.GetFilesメソッドを使用しています。これは、サブフォルダとファイルを分けて調べることで、少しでも処理が早く済むようにしています。
''' <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
/// <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; }