Directory.EnumerateFiles メソッド

定義

指定された条件を満たすファイルの完全名から成る、列挙可能なコレクションを返します。

オーバーロード

EnumerateFiles(String, String, SearchOption)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。オプションでサブディレクトリを検索対象にできます。

EnumerateFiles(String, String, EnumerationOptions)

指定したパス内にあり、検索パターンと列挙オプションに一致する、ファイルの完全名の列挙可能なコレクションを返します。必要に応じて、サブディレクトリを検索します。

EnumerateFiles(String)

指定されたパスに存在するファイルの完全名から成る、列挙可能なコレクションを返します。

EnumerateFiles(String, String)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。

EnumerateFiles(String, String, SearchOption)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。オプションでサブディレクトリを検索対象にできます。

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

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のファイル名と対応させる検索文字列。 このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。

searchOption
SearchOption

検索操作に現在のディレクトリのみを含めるのか、またはすべてのサブディレクトリを含めるのかを指定する列挙値の 1 つ。 既定値は TopDirectoryOnly です。

戻り値

IEnumerable<String>

path で指定したディレクトリ内にあり、指定した検索パターンおよび検索オプションと一致する、ファイルの完全名 (パスを含む) の列挙可能なコレクション。

例外

2.1 より前のバージョンの.NET Frameworkと .NET Core: path 長さが 0 の文字列、空白のみを含む、または無効な文字が含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

  • または - searchPattern には有効なパターンが含まれません。

pathnullです。

または searchPatternnullです。

searchOption は正しい SearchOption 値ではありません。

たとえば、マップされていないドライブへの参照など、path は無効です。

path はファイル名です。

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。

呼び出し元に、必要なアクセス許可がありません。

呼び出し元に、必要なアクセス許可がありません。

次の例は、ディレクトリとそのサブディレクトリ内のすべてのテキスト ファイルを取得し、新しいディレクトリに移動する方法を示しています。 ファイルが移動されると、元のディレクトリに存在しなくなります。

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);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories)

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{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" が含まれている場合は行を表示します。

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);
        }
    }
}
open System
open System.IO

try
    // Set a variable to the My Documents path.
    let docPath =
        Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories) do
            for line in File.ReadLines file do
            where (line.Contains "Microsoft")
            select {| File = file; Line = line |}
        }

    for f in files do
        printfn $"{f.File}\t{f.Line}"
    printfn $"{Seq.length files} files found."

with
| :? UnauthorizedAccessException as uAEx -> printfn $"{uAEx.Message}"
| :? PathTooLongException as pathEx -> printfn $"{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使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は、文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

注意

.NET Frameworkのみ: でアスタリスクワイルドカード文字を使用し、3 文字のファイル拡張子 (".txt" など) を指定すると、このメソッドは、指定した拡張子で始まる拡張子を持つファイルも返します。 searchPattern * たとえば、検索パターン ".xls" は、"book.xls" と * "book.xlsx" の両方を返します。 この動作は、検索パターンでアスタリスクが使用され、指定されたファイル拡張子が正確に 3 文字である場合にのみ発生します。 アスタリスクの代わりに疑問符のワイルドカード文字を使用する場合、このメソッドは、指定されたファイル拡張子と正確に一致するファイルのみを返します。 次の表に、この異常を示.NET Framework。

ディレクトリ内のファイル 検索パターン .NET 5+ の戻り値 .NET Framework戻り値
file.ai、file.aif *.ai file.ai file.ai
book.xls、book.xlsx *.xls book.xls book.xls、book.xlsx
file.ai、file.aif ?.Ai file.ai file.ai
book.xls、book.xlsx ?.xls book.xls book.xls

searchPattern は、2 つのピリオド ("..") で終わることはできません。また、2 つのピリオド (".") の後 DirectorySeparatorChar に続くも AltDirectorySeparatorCharのも含めることもできます。また、無効な文字を含めることもできます。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

パラメーターを使用して相対パス情報を path 指定できます。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。これは、メソッドを GetCurrentDirectory 使用して決定できます。

メソッドとGetFilesメソッドはEnumerateFiles次のように異なります。使用EnumerateFilesすると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。 使用 GetFilesする場合は、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateFiles より効率的な場合があります。

返されたコレクションはキャッシュされません。コレクションに対する GetEnumerator 各呼び出しは、新しい列挙を開始します。

適用対象

EnumerateFiles(String, String, EnumerationOptions)

指定したパス内にあり、検索パターンと列挙オプションに一致する、ファイルの完全名の列挙可能なコレクションを返します。必要に応じて、サブディレクトリを検索します。

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

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のファイル名と対応させる検索文字列。 このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。

enumerationOptions
EnumerationOptions

使用する検索と列挙の構成を記述するオブジェクト。

戻り値

IEnumerable<String>

path で指定したディレクトリ内にあり、指定した検索パターンおよび列挙オプションと一致する、ファイルの完全名 (パスを含む) の列挙可能なコレクション。

例外

2.1 より前のバージョンの.NET Frameworkと .NET Core: path 長さが 0 の文字列、空白のみを含む、または無効な文字が含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

  • または - searchPattern には有効なパターンが含まれません。

pathnullです。

または searchPatternnullです。

searchOption は正しい SearchOption 値ではありません。

たとえば、マップされていないドライブへの参照など、path は無効です。

path はファイル名です。

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。

呼び出し元に、必要なアクセス許可がありません。

注釈

searchPattern はリテラル文字とワイルドカード文字の組み合わせですが、正規表現はサポートされていません。 で次のワイルドカード指定子を searchPattern使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は、文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

注意

.NET Frameworkのみ: でアスタリスクワイルドカード文字を使用し、3 文字のファイル拡張子 (".txt" など) を指定すると、このメソッドは、指定した拡張子で始まる拡張子を持つファイルも返します。 searchPattern * たとえば、検索パターン ".xls" は、"book.xls" と * "book.xlsx" の両方を返します。 この動作は、検索パターンでアスタリスクが使用され、指定されたファイル拡張子が正確に 3 文字である場合にのみ発生します。 アスタリスクの代わりに疑問符のワイルドカード文字を使用する場合、このメソッドは、指定されたファイル拡張子と正確に一致するファイルのみを返します。 次の表に、この異常を示.NET Framework。

ディレクトリ内のファイル 検索パターン .NET 5+ の戻り値 .NET Framework戻り値
file.ai、file.aif *.ai file.ai file.ai
book.xls、book.xlsx *.xls book.xls book.xls、book.xlsx
file.ai、file.aif ?.Ai file.ai file.ai
book.xls、book.xlsx ?.xls book.xls book.xls

searchPattern は、2 つのピリオド ("..") で終わることはできません。また、2 つのピリオド (".") の後 DirectorySeparatorChar に続くも AltDirectorySeparatorCharのも含めることもできます。また、無効な文字を含めることもできます。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

パラメーターを使用して相対パス情報を path 指定できます。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。これは、メソッドを GetCurrentDirectory 使用して決定できます。

メソッドとGetFilesメソッドはEnumerateFiles次のように異なります。使用EnumerateFilesすると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。 使用 GetFilesする場合は、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateFiles より効率的な場合があります。

返されたコレクションはキャッシュされません。コレクションに対する GetEnumerator 各呼び出しは、新しい列挙を開始します。

適用対象

EnumerateFiles(String)

指定されたパスに存在するファイルの完全名から成る、列挙可能なコレクションを返します。

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

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

戻り値

IEnumerable<String>

path で指定したディレクトリ内にあるファイルの完全名 (パスを含む) から成る列挙可能なコレクション。

例外

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さ 0 の文字列、空白のみを含む、または無効な文字が含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

pathnullです。

たとえば、マップされていないドライブへの参照など、path は無効です。

path はファイル名です。

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。

呼び出し元に、必要なアクセス許可がありません。

呼び出し元に、必要なアクセス許可がありません。

次の例は、ディレクトリ内のすべてのファイルを取得し、新しいディレクトリに移動する方法を示しています。 ファイルが移動されると、元のディレクトリに存在しなくなります。

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);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles sourceDirectory

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with e ->
    printfn $"{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

次の例では、指定したディレクトリ内のファイルを列挙し、ファイルの各行を読み取り、文字列 "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);
        }
    }
}
open System
open System.IO

try
    // All files containing the word 'Europe'.
    let files =
        Directory.EnumerateFiles @"\\archives1\library\"
        |> Seq.filter (fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

with 
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{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 指定できます。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。これは、メソッドを GetCurrentDirectory 使用して決定できます。

メソッドとGetFilesメソッドはEnumerateFiles次のように異なります。使用EnumerateFilesすると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。 使用 GetFilesする場合は、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルとディレクトリを操作する場合は、 EnumerateFiles より効率的になります。

返されたコレクションはキャッシュされません。コレクションの各呼び出し GetEnumerator で新しい列挙が開始されます。

適用対象

EnumerateFiles(String, String)

指定されたパスから、検索パターンに一致するファイルの完全名から成る、列挙可能なコレクションを返します。

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

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のファイル名と対応させる検索文字列。 このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。

戻り値

IEnumerable<String>

指定した検索パターンに一致し、path で指定したディレクトリの中にあるファイルの完全名 (パスを含む) から成る列挙可能なコレクション。

例外

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さ 0 の文字列、空白のみを含む、または無効な文字が含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

  • または - searchPattern には有効なパターンが含まれません。

pathnullです。

または searchPatternnullです。

たとえば、マップされていないドライブへの参照など、path は無効です。

path はファイル名です。

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。

呼び出し元に、必要なアクセス許可がありません。

呼び出し元に、必要なアクセス許可がありません。

次の例は、ディレクトリ内のすべてのテキスト ファイルを取得し、それらを新しいディレクトリに移動する方法を示しています。 ファイルが移動されると、元のディレクトリに存在しなくなります。

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);
            }
        }
    }
}
open System.IO

let sourceDirectory = @"C:\current"
let archiveDirectory = @"C:\archive"

try
    let txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt")

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))

with e ->
    printfn $"{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" 拡張子を持つファイルを列挙し、ファイルの各行を読み取り、文字列 "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);
        }
    }
}
open System
open System.IO

try
    // All .txt files containing the word 'Europe'.
    let files = 
        Directory.EnumerateFiles(@"\\archives1\library\", "*.txt")
        |> Seq.filter(fun file -> file.ToLower().Contains "europe")

    for file in files do
        printfn $"{file}"
    printfn $"{Seq.length files} files found."

with
| :? UnauthorizedAccessException as uaEx ->
    printfn $"{uaEx.Message}"
| :? PathTooLongException as pathEx ->
    printfn $"{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使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

注意

.NET Frameworkのみ: でアスタリスクワイルドカード文字を使用し、3 文字のファイル拡張子 (".txt" など) を指定すると、このメソッドは、指定した拡張子で始まる拡張子を持つファイルも返します。 searchPattern * たとえば、検索パターン ".xls" は、"book.xls" と * "book.xlsx" の両方を返します。 この動作は、検索パターンでアスタリスクが使用され、指定されたファイル拡張子が正確に 3 文字である場合にのみ発生します。 アスタリスクの代わりに疑問符のワイルドカード文字を使用する場合、このメソッドは、指定されたファイル拡張子と正確に一致するファイルのみを返します。 次の表に、この異常を示.NET Framework。

ディレクトリ内のファイル 検索パターン .NET 5+ の戻り値 .NET Framework戻り値
file.ai、file.aif *.ai file.ai file.ai
book.xls、book.xlsx *.xls book.xls book.xls、book.xlsx
file.ai、file.aif ?.Ai file.ai file.ai
book.xls、book.xlsx ?.xls book.xls book.xls

searchPatternは、2 つのピリオド (".." で終わることはできません。また、2 つのピリオド ("..") の後にDirectorySeparatorCharAltDirectorySeparatorChar続くか、無効な文字を含めることはできません。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

パラメーターを使用して相対パス情報を path 指定できます。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。これは、メソッドを GetCurrentDirectory 使用して決定できます。

メソッドとGetFilesメソッドはEnumerateFiles次のように異なります。使用EnumerateFilesすると、コレクション全体が返される前に名前のコレクションの列挙を開始できます。使用GetFilesする場合は、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルとディレクトリを操作する場合は、 EnumerateFiles より効率的になります。

返されたコレクションはキャッシュされません。コレクションの各呼び出し GetEnumerator で新しい列挙が開始されます。

適用対象