Directory.EnumerateFiles メソッド

定義

指定された条件を満たすファイルの完全名から成る、列挙可能なコレクションを返します。Returns an enumerable collection of full file names that meet specified criteria.

オーバーロード

EnumerateFiles(String, String, EnumerationOptions)

指定したパス内にあり、検索パターンと列挙オプションに一致する、ファイルの完全名の列挙可能なコレクションを返します。必要に応じて、サブディレクトリを検索します。Returns an enumerable collection of full file names that match a search pattern and enumeration options in a specified path, and optionally searches subdirectories.

EnumerateFiles(String, String, SearchOption)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。オプションでサブディレクトリを検索対象にできます。Returns an enumerable collection of full file names that match a search pattern in a specified path, and optionally searches subdirectories.

EnumerateFiles(String)

指定されたパスに存在するファイルの完全名から成る、列挙可能なコレクションを返します。Returns an enumerable collection of full file names in a specified path.

EnumerateFiles(String, String)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。Returns an enumerable collection of full file names that match a search pattern in a specified path.

EnumerateFiles(String, String, EnumerationOptions)

指定したパス内にあり、検索パターンと列挙オプションに一致する、ファイルの完全名の列挙可能なコレクションを返します。必要に応じて、サブディレクトリを検索します。Returns an enumerable collection of full file names that match a search pattern and enumeration options in a specified path, and optionally searches subdirectories.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member EnumerateFiles : string * string * System.IO.EnumerationOptions -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As IEnumerable(Of String)

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。The relative or absolute path to the directory to search. この文字列の大文字と小文字は区別されません。This string is not case-sensitive.

searchPattern
String

path 内のファイル名と対応させる検索文字列。The search string to match against the names of files in path. このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.

enumerationOptions
EnumerationOptions

使用する検索と列挙の構成を記述するオブジェクト。An object that describes the search and enumeration configuration to use.

戻り値

path で指定したディレクトリ内にあり、指定した検索パターンおよび列挙オプションと一致する、ファイルの完全名 (パスを含む) の列挙可能なコレクション。An enumerable collection of the full names (including paths) for the files in the directory specified by path and that match the specified search pattern and enumeration options.

例外

path は長さゼロの文字列で、空白のみで構成されているか、または無効な文字が使用されています。path is a zero-length string, contains only white space, or contains invalid characters. 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars() method.

- または --or- searchPattern には有効なパターンが含まれません。searchPattern does not contain a valid pattern.

pathnullです。path is null.

- または --or- searchPatternnullです。searchPattern is null.

searchOption は有効な SearchOption 値ではありません。searchOption is not a valid SearchOption value.

たとえば、マップされていないドライブへの参照など、path は無効です。path is invalid, such as referring to an unmapped drive.

path はファイル名です。path is a file name.

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。The specified path, file name, or combined exceed the system-defined maximum length.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

注釈

searchPattern には、リテラル文字とワイルドカード文字の組み合わせを使用できますが、正規表現はサポートされていません。searchPattern can be a combination of literal and wildcard characters, but it doesn't support regular expressions. searchPatternでは、次のワイルドカード指定子を使用できます。The following wildcard specifiers are permitted in searchPattern.

ワイルドカード指定子Wildcard specifier 一致件数Matches
* (アスタリスク)* (asterisk) その位置に0個以上の文字が含まれています。Zero or more characters in that position.
?? (疑問符)(question mark) その位置に0個または1個の文字。Zero or one character in that position.

ワイルドカード以外の文字はリテラル文字です。Characters other than the wildcard are literal characters. たとえば、searchPattern 文字列 "*t" は、末尾が文字 "t" である path 内のすべての名前を検索します。For example, the searchPattern string "*t" searches for all names in path ending with the letter "t". searchPattern 文字列 "s*" は、文字 "s" で始まる path 内のすべての名前を検索します。The searchPattern string "s*" searches for all names in path beginning with the letter "s".

注意

"*.txt" などの searchPattern でアスタリスクのワイルドカード文字を使用すると、指定した拡張機能の文字数は次のようになります。When you use the asterisk wildcard character in a searchPattern such as "*.txt", the number of characters in the specified extension affects the search as follows:

  • 指定された拡張子の長さが完全に3文字である場合、メソッドは、指定された拡張子で始まる拡張子を持つファイルを返します。If the specified extension is exactly three characters long, the method returns files with extensions that begin with the specified extension. たとえば、"*. .xls" は、"book. .xls" と "book" の両方を返します。For example, "*.xls" returns both "book.xls" and "book.xlsx".
  • それ以外の場合、メソッドは、指定された拡張子と完全に一致するファイルを返します。In all other cases, the method returns files that exactly match the specified extension. たとえば、"*" は "file.ai" を返しますが、"file. aif" は返しません。For example, "*.ai" returns "file.ai" but not "file.aif".

疑問符のワイルドカード文字を使用すると、このメソッドは、指定されたファイル拡張子に一致するファイルだけを返します。When you use the question mark wildcard character, this method returns only files that match the specified file extension. たとえば、"file1" と "file1" の2つのファイルがある場合、ディレクトリでは "file?" という検索パターンが使用されます。txt "は、最初のファイルだけを返します。一方、" file*.txt "の検索パターンは両方のファイルを返します。For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, whereas a search pattern of "file*.txt" returns both files.

searchPattern の末尾に2つのピリオド ("..") を指定することはできません。また、2つのピリオド ("..") に続けて DirectorySeparatorChar または AltDirectorySeparatorCharを含めることも、無効な文字を含めることもできません。searchPattern cannot end in two periods ("..") or contain two periods ("..") followed by DirectorySeparatorChar or AltDirectorySeparatorChar, nor can it contain any invalid characters. 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars method.

path パラメーターを使用して相対パス情報を指定できます。You can specify relative path information with the path parameter. 相対パス情報は、現在の作業ディレクトリを基準として解釈されます。これは、GetCurrentDirectory メソッドを使用して判断できます。Relative path information is interpreted as relative to the current working directory, which you can determine by using the GetCurrentDirectory method.

EnumerateFiles メソッドと GetFiles メソッドは次のように異なります。 EnumerateFilesを使用すると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。GetFilesを使用するときは、配列にアクセスする前に、名前の配列全体が返されるまで待機する必要があります。The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. そのため、多くのファイルとディレクトリを操作している場合、EnumerateFiles の方が効率的です。Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.

返されたコレクションはキャッシュされません。コレクションの GetEnumerator を呼び出すたびに、新しい列挙が開始されます。The returned collection is not cached; each call to the GetEnumerator on the collection will start a new enumeration.

EnumerateFiles(String, String, SearchOption)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。オプションでサブディレクトリを検索対象にできます。Returns an enumerable collection of full file names that match a search pattern in a specified path, and optionally searches subdirectories.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern, System.IO.SearchOption searchOption);
static member EnumerateFiles : string * string * System.IO.SearchOption -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String, searchOption As SearchOption) As IEnumerable(Of String)

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。The relative or absolute path to the directory to search. この文字列の大文字と小文字は区別されません。This string is not case-sensitive.

searchPattern
String

path 内のファイル名と対応させる検索文字列。The search string to match against the names of files in path. このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.

searchOption
SearchOption

検索操作に現在のディレクトリのみを含めるのか、またはすべてのサブディレクトリを含めるのかを指定する列挙値の 1 つ。One of the enumeration values that specifies whether the search operation should include only the current directory or should include all subdirectories. 既定値は TopDirectoryOnly です。The default value is TopDirectoryOnly.

戻り値

path で指定したディレクトリ内にあり、指定した検索パターンおよび検索オプションと一致する、ファイルの完全名 (パスを含む) の列挙可能なコレクション。An enumerable collection of the full names (including paths) for the files in the directory specified by path and that match the specified search pattern and search option.

例外

path は長さゼロの文字列で、空白のみで構成されているか、または無効な文字が使用されています。path is a zero-length string, contains only white space, or contains invalid characters. 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars() method.

- または --or- searchPattern には有効なパターンが含まれません。searchPattern does not contain a valid pattern.

pathnullです。path is null.

- または --or- searchPatternnullです。searchPattern is null.

searchOption は有効な SearchOption 値ではありません。searchOption is not a valid SearchOption value.

たとえば、マップされていないドライブへの参照など、path は無効です。path is invalid, such as referring to an unmapped drive.

path はファイル名です。path is a file name.

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。The specified path, file name, or combined exceed the system-defined maximum length.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

次の例では、ディレクトリとそのサブディレクトリにあるすべてのテキストファイルを取得し、それらを新しいディレクトリに移動する方法を示します。The following example shows how to retrieve all the text files in a directory and its subdirectories, and move them to a new directory. ファイルが移動されると、元のディレクトリには存在しなくなります。After the files are moved, they no longer exist in the original directories.

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories);

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub

End Module

次の例では、拡張子が .txt のすべてのファイルを再帰的に列挙し、ファイルの各行を読み取り、その行に "Microsoft" という文字列が含まれている場合はその行を表示します。The following example recursively enumerates all files that have a .txt extension, reads each line of the file, and displays the line if it contains the string "Microsoft".

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath =
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }
            Console.WriteLine($"{files.Count().ToString()} files found.");
        }
        catch (UnauthorizedAccessException uAEx)
        {
            Console.WriteLine(uAEx.Message);
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
    }
}
Imports System.IO
Imports System.Xml.Linq

Module Module1

    Sub Main()
        Try
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        From line In File.ReadLines(chkFile)
                        Where line.Contains("Microsoft")
                        Select New With {.curFile = chkFile, .curLine = line}

            For Each f In files
                Console.WriteLine($"{f.File}\t{f.Line}")
            Next
            Console.WriteLine($"{files.Count} files found.")
        Catch uAEx As UnauthorizedAccessException
            Console.WriteLine(uAEx.Message)
        Catch pathEx As PathTooLongException
            Console.WriteLine(pathEx.Message)
        End Try
    End Sub
End Module

注釈

searchPattern には、リテラル文字とワイルドカード文字の組み合わせを使用できますが、正規表現はサポートされていません。searchPattern can be a combination of literal and wildcard characters, but it doesn't support regular expressions. searchPatternでは、次のワイルドカード指定子を使用できます。The following wildcard specifiers are permitted in searchPattern.

ワイルドカード指定子Wildcard specifier 一致件数Matches
* (アスタリスク)* (asterisk) その位置に0個以上の文字が含まれています。Zero or more characters in that position.
?? (疑問符)(question mark) その位置に0個または1個の文字。Zero or one character in that position.

ワイルドカード以外の文字はリテラル文字です。Characters other than the wildcard are literal characters. たとえば、searchPattern 文字列 "*t" は、末尾が文字 "t" である path 内のすべての名前を検索します。For example, the searchPattern string "*t" searches for all names in path ending with the letter "t". searchPattern 文字列 "s*" は、文字 "s" で始まる path 内のすべての名前を検索します。The searchPattern string "s*" searches for all names in path beginning with the letter "s".

注意

"*.txt" などの searchPattern でアスタリスクのワイルドカード文字を使用すると、指定した拡張機能の文字数は次のようになります。When you use the asterisk wildcard character in a searchPattern such as "*.txt", the number of characters in the specified extension affects the search as follows:

  • 指定された拡張子の長さが完全に3文字である場合、メソッドは、指定された拡張子で始まる拡張子を持つファイルを返します。If the specified extension is exactly three characters long, the method returns files with extensions that begin with the specified extension. たとえば、"*. .xls" は、"book. .xls" と "book" の両方を返します。For example, "*.xls" returns both "book.xls" and "book.xlsx".
  • それ以外の場合、メソッドは、指定された拡張子と完全に一致するファイルを返します。In all other cases, the method returns files that exactly match the specified extension. たとえば、"*" は "file.ai" を返しますが、"file. aif" は返しません。For example, "*.ai" returns "file.ai" but not "file.aif".

疑問符のワイルドカード文字を使用すると、このメソッドは、指定されたファイル拡張子に一致するファイルだけを返します。When you use the question mark wildcard character, this method returns only files that match the specified file extension. たとえば、"file1" と "file1" の2つのファイルがある場合、ディレクトリでは "file?" という検索パターンが使用されます。txt "は、最初のファイルだけを返します。一方、" file*.txt "の検索パターンは両方のファイルを返します。For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, whereas a search pattern of "file*.txt" returns both files.

searchPattern の末尾に2つのピリオド ("..") を指定することはできません。また、2つのピリオド ("..") に続けて DirectorySeparatorChar または AltDirectorySeparatorCharを含めることも、無効な文字を含めることもできません。searchPattern cannot end in two periods ("..") or contain two periods ("..") followed by DirectorySeparatorChar or AltDirectorySeparatorChar, nor can it contain any invalid characters. 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars method.

path パラメーターを使用して相対パス情報を指定できます。You can specify relative path information with the path parameter. 相対パス情報は、現在の作業ディレクトリを基準として解釈されます。これは、GetCurrentDirectory メソッドを使用して判断できます。Relative path information is interpreted as relative to the current working directory, which you can determine by using the GetCurrentDirectory method.

EnumerateFiles メソッドと GetFiles メソッドは次のように異なります。 EnumerateFilesを使用すると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。GetFilesを使用するときは、配列にアクセスする前に、名前の配列全体が返されるまで待機する必要があります。The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. そのため、多くのファイルとディレクトリを操作している場合、EnumerateFiles の方が効率的です。Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.

返されたコレクションはキャッシュされません。コレクションの GetEnumerator を呼び出すたびに、新しい列挙が開始されます。The returned collection is not cached; each call to the GetEnumerator on the collection will start a new enumeration.

EnumerateFiles(String)

指定されたパスに存在するファイルの完全名から成る、列挙可能なコレクションを返します。Returns an enumerable collection of full file names in a specified path.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path);
static member EnumerateFiles : string -> seq<string>
Public Shared Function EnumerateFiles (path As String) As IEnumerable(Of String)

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。The relative or absolute path to the directory to search. この文字列の大文字と小文字は区別されません。This string is not case-sensitive.

戻り値

path で指定したディレクトリ内にあるファイルの完全名 (パスを含む) から成る列挙可能なコレクション。An enumerable collection of the full names (including paths) for the files in the directory specified by path.

例外

path は長さゼロの文字列で、空白のみで構成されているか、または無効な文字が使用されています。path is a zero-length string, contains only white space, or contains invalid characters. 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars() method.

pathnullです。path is null.

たとえば、マップされていないドライブへの参照など、path は無効です。path is invalid, such as referring to an unmapped drive.

path はファイル名です。path is a file name.

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。The specified path, file name, or combined exceed the system-defined maximum length.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

次の例は、ディレクトリ内のすべてのファイルを取得し、それらを新しいディレクトリに移動する方法を示しています。The following example shows how to retrieve all the files in a directory and move them to a new directory. ファイルが移動されると、元のディレクトリには存在しなくなります。After the files are moved, they no longer exist in the original directory.

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory);

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory)

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub

End Module

次の例では、指定されたディレクトリ内のファイルを列挙し、ファイルの各行を読み取り、文字列 "ヨーロッパ" が含まれている場合はその行を表示します。The following example enumerates the files in the specified directory, reads each line of the file, and displays the line if it contains the string "Europe".

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // LINQ query for all files containing the word 'Europe'.
            var files = from file in 
                Directory.EnumerateFiles(@"\\archives1\library\")
                where file.ToLower().Contains("europe")
                select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }
            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
Imports System.IO
Imports System.Linq

Module Module1

    Sub Main()
        Try
            ' LINQ query for all files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\")
                Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next
            Console.WriteLine("{0} files found.", files.Count.ToString())
        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try
    End Sub

End Module

注釈

path パラメーターを使用して相対パス情報を指定できます。You can specify relative path information with the path parameter. 相対パス情報は、現在の作業ディレクトリを基準として解釈されます。これは、GetCurrentDirectory メソッドを使用して判断できます。Relative path information is interpreted as relative to the current working directory, which you can determine by using the GetCurrentDirectory method.

EnumerateFiles メソッドと GetFiles メソッドは次のように異なります。 EnumerateFilesを使用すると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。GetFilesを使用するときは、配列にアクセスする前に、名前の配列全体が返されるまで待機する必要があります。The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. そのため、多くのファイルとディレクトリを操作している場合、EnumerateFiles の方が効率的です。Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.

返されたコレクションはキャッシュされません。コレクションの GetEnumerator を呼び出すたびに、新しい列挙が開始されます。The returned collection is not cached; each call to the GetEnumerator on the collection will start a new enumeration.

EnumerateFiles(String, String)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。Returns an enumerable collection of full file names that match a search pattern in a specified path.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ EnumerateFiles(System::String ^ path, System::String ^ searchPattern);
public static System.Collections.Generic.IEnumerable<string> EnumerateFiles (string path, string searchPattern);
static member EnumerateFiles : string * string -> seq<string>
Public Shared Function EnumerateFiles (path As String, searchPattern As String) As IEnumerable(Of String)

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。The relative or absolute path to the directory to search. この文字列の大文字と小文字は区別されません。This string is not case-sensitive.

searchPattern
String

path 内のファイル名と対応させる検索文字列。The search string to match against the names of files in path. このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.

戻り値

指定した検索パターンに一致し、path で指定したディレクトリの中にあるファイルの完全名 (パスを含む) から成る列挙可能なコレクション。An enumerable collection of the full names (including paths) for the files in the directory specified by path and that match the specified search pattern.

例外

path は長さゼロの文字列で、空白のみで構成されているか、または無効な文字が使用されています。path is a zero-length string, contains only white space, or contains invalid characters. 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars() method.

- または --or- searchPattern には有効なパターンが含まれません。searchPattern does not contain a valid pattern.

pathnullです。path is null.

- または --or- searchPatternnullです。searchPattern is null.

たとえば、マップされていないドライブへの参照など、path は無効です。path is invalid, such as referring to an unmapped drive.

path はファイル名です。path is a file name.

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。The specified path, file name, or combined exceed the system-defined maximum length.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

呼び出し元に、必要なアクセス許可がありません。The caller does not have the required permission.

次の例は、ディレクトリ内のすべてのテキストファイルを取得し、それらを新しいディレクトリに移動する方法を示しています。The following example shows how to retrieve all the text files in a directory and move them to a new directory. ファイルが移動されると、元のディレクトリには存在しなくなります。After the files are moved, they no longer exist in the original directory.

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Try
            Dim txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

            For Each currentFile As String In txtFiles
                Dim fileName = currentFile.Substring(sourceDirectory.Length + 1)
                Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
            Next
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try
    End Sub

End Module

次の例では、指定したディレクトリ内のファイルのうち、拡張子が .txt のファイルを列挙し、ファイルの各行を読み取り、文字列 "ヨーロッパ" が含まれている場合はその行を表示します。The following example enumerates the files in the specified directory that have a .txt extension, reads each line of the file, and displays the line if it contains the string "Europe".

using System;
using System.Linq;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // LINQ query for all .txt files containing the word 'Europe'.
            var files = from file in Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
                where file.ToLower().Contains("europe")
                select file;

            foreach (var file in files)
            {
                Console.WriteLine("{0}", file);
            }
            Console.WriteLine("{0} files found.", files.Count<string>().ToString());
        }
            
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
Imports System.IO
Imports System.Linq

Module Module1

    Sub Main()
        Try
            ' LINQ query for all .txt files containing the word 'Europe'.
            Dim files = From file In Directory.EnumerateFiles("\\archives1\library\", "*.txt")
                Where file.ToLower().Contains("europe")

            For Each file In files
                Console.WriteLine("{0}", file)
            Next
            Console.WriteLine("{0} files found.", files.Count.ToString())
        Catch UAEx As UnauthorizedAccessException
            Console.WriteLine(UAEx.Message)
        Catch PathEx As PathTooLongException
            Console.WriteLine(PathEx.Message)
        End Try
    End Sub

End Module

注釈

searchPattern には、リテラル文字とワイルドカード文字の組み合わせを使用できますが、正規表現はサポートされていません。searchPattern can be a combination of literal and wildcard characters, but it doesn't support regular expressions. searchPatternでは、次のワイルドカード指定子を使用できます。The following wildcard specifiers are permitted in searchPattern.

ワイルドカード指定子Wildcard specifier 一致件数Matches
* (アスタリスク)* (asterisk) その位置に0個以上の文字が含まれています。Zero or more characters in that position.
?? (疑問符)(question mark) その位置に0個または1個の文字。Zero or one character in that position.

ワイルドカード以外の文字はリテラル文字です。Characters other than the wildcard are literal characters. たとえば、searchPattern 文字列 "*t" は、末尾が文字 "t" である path 内のすべての名前を検索します。For example, the searchPattern string "*t" searches for all names in path ending with the letter "t". searchPattern 文字列 "s*" は、文字 "s" で始まる path 内のすべての名前を検索します。The searchPattern string "s*" searches for all names in path beginning with the letter "s".

注意

"*.txt" などの searchPattern でアスタリスクのワイルドカード文字を使用すると、指定した拡張機能の文字数は次のようになります。When you use the asterisk wildcard character in a searchPattern such as "*.txt", the number of characters in the specified extension affects the search as follows:

  • 指定された拡張子の長さが完全に3文字である場合、メソッドは、指定された拡張子で始まる拡張子を持つファイルを返します。If the specified extension is exactly three characters long, the method returns files with extensions that begin with the specified extension. たとえば、"*. .xls" は、"book. .xls" と "book" の両方を返します。For example, "*.xls" returns both "book.xls" and "book.xlsx".
  • それ以外の場合、メソッドは、指定された拡張子と完全に一致するファイルを返します。In all other cases, the method returns files that exactly match the specified extension. たとえば、"*" は "file.ai" を返しますが、"file. aif" は返しません。For example, "*.ai" returns "file.ai" but not "file.aif".

疑問符のワイルドカード文字を使用すると、このメソッドは、指定されたファイル拡張子に一致するファイルだけを返します。When you use the question mark wildcard character, this method returns only files that match the specified file extension. たとえば、"file1" と "file1" の2つのファイルがある場合、ディレクトリでは "file?" という検索パターンが使用されます。txt "は、最初のファイルだけを返します。一方、" file*.txt "の検索パターンは両方のファイルを返します。For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, whereas a search pattern of "file*.txt" returns both files.

searchPattern の末尾に2つのピリオド ("..") を指定することはできません。また、2つのピリオド ("..") に続けて DirectorySeparatorChar または AltDirectorySeparatorCharを含めることも、無効な文字を含めることもできません。searchPattern cannot end in two periods ("..") or contain two periods ("..") followed by DirectorySeparatorChar or AltDirectorySeparatorChar, nor can it contain any invalid characters. 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。You can query for invalid characters by using the GetInvalidPathChars method.

path パラメーターを使用して相対パス情報を指定できます。You can specify relative path information with the path parameter. 相対パス情報は、現在の作業ディレクトリを基準として解釈されます。これは、GetCurrentDirectory メソッドを使用して判断できます。Relative path information is interpreted as relative to the current working directory, which you can determine by using the GetCurrentDirectory method.

EnumerateFiles メソッドと GetFiles メソッドは次のように異なります。 EnumerateFilesを使用すると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。GetFilesを使用するときは、配列にアクセスする前に、名前の配列全体が返されるまで待機する必要があります。The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. そのため、多くのファイルとディレクトリを操作している場合、EnumerateFiles の方が効率的です。Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.

返されたコレクションはキャッシュされません。コレクションの GetEnumerator を呼び出すたびに、新しい列挙が開始されます。The returned collection is not cached; each call to the GetEnumerator on the collection will start a new enumeration.

適用対象