Directory.EnumerateFiles 메서드

정의

지정된 조건을 충족하는 전체 파일 이름의 열거 가능한 컬렉션을 반환합니다.

오버로드

Name Description
EnumerateFiles(String, String, EnumerationOptions)

지정된 경로의 검색 패턴 및 열거 옵션과 일치하는 전체 파일 이름의 열거 가능한 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.

EnumerateFiles(String, String, SearchOption)

지정된 경로의 검색 패턴과 일치하는 전체 파일 이름의 열거 가능한 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.

EnumerateFiles(String)

지정된 경로에 있는 전체 파일 이름의 열거 가능한 컬렉션을 반환합니다.

EnumerateFiles(String, String)

지정된 경로의 검색 패턴과 일치하는 전체 파일 이름의 열거 가능한 컬렉션을 반환합니다.

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

사용할 검색 및 열거형 구성을 설명하는 개체입니다.

반품

지정한 디렉터리에 있는 파일에 대해 지정된 path 검색 패턴 및 열거형 옵션과 일치하는 전체 이름(경로 포함)의 열거 가능한 컬렉션입니다.

예외

.NET Framework 및 .NET Core 버전이 2.1보다 오래된 경우: path 길이가 0인 문자열이거나 공백만 포함하거나 잘못된 문자를 포함합니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars() 수 있습니다.

-또는-

searchPattern 은 유효한 패턴을 포함하지 않습니다.

pathnull입니다.

-또는-

searchPatternnull입니다.

path 가 잘못되었습니다(예: 매핑되지 않은 드라이브를 참조하는 경우).

path 은 파일 이름입니다.

지정된 경로, 파일 이름 또는 결합이 시스템 정의 최대 길이를 초과합니다.

호출자에게 필요한 권한이 없습니다.

예제

다음 예제에서는 디렉터리 및 해당 하위 디렉터리의 모든 텍스트 파일을 검색하고 새 디렉터리로 이동하는 방법을 보여 있습니다. 파일을 이동한 후에는 원래 디렉터리에 더 이상 존재하지 않습니다.

using System;
using System.IO;

partial class Example1
{
    static void EnumerationOptionsExample()
    {
        string sourceDirectory = @"C:\current";
        string archiveDirectory = @"C:\archive";

        var options = new EnumerationOptions
        {
            MatchCasing = MatchCasing.CaseInsensitive,
            MatchType = MatchType.Simple,
            RecurseSubdirectories = true
        };

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

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

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

let options = new EnumerationOptions(
    MatchCasing = MatchCasing.CaseInsensitive,
    MatchType = MatchType.Simple,
    RecurseSubdirectories = true
)

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

    for currentFile in txtFiles do
        let fileName = currentFile.Substring(sourceDirectory.Length + 1)
        Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName))
with ex ->
    printfn $"{ex.Message}"
Imports System.IO

Partial Class Example1
    Shared Sub EnumerationOptionsExample()

        Dim sourceDirectory As String = "C:\current"
        Dim archiveDirectory As String = "C:\archive"

        Dim options As New EnumerationOptions() With {
            .MatchCasing = MatchCasing.CaseInsensitive,
            .MatchType = MatchType.Simple,
            .RecurseSubdirectories = True
        }

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

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

    End Sub
End Class

다음 예제에서는 액세스할 수 없는 디렉터리와 파일을 무시하고 확장이 .txt 있는 모든 파일을 재귀적으로 열거합니다. 파일의 각 줄을 읽고 "Microsoft" 문자열이 포함된 경우 줄을 표시합니다.

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

partial class Example2
{
    static void EnumerationOptionsExample()
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            // Set the options for the enumeration.
            var options = new EnumerationOptions
            {
                IgnoreInaccessible = true,
                MatchCasing = MatchCasing.CaseInsensitive,
                MatchType = MatchType.Simple,
                RecurseSubdirectories = true
            };

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", options)
                        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()} files found.");
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
open System
open System.IO

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

    // Set the options for the enumeration.
    let options = new EnumerationOptions(
        IgnoreInaccessible = true,
        MatchCasing = MatchCasing.CaseInsensitive,
        MatchType = MatchType.Simple,
        RecurseSubdirectories = true
    )

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", options) 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
| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}"
| ex -> printfn $"{ex.Message}"
Imports System.IO
Imports System.Xml.Linq

Partial Class Example2
    Shared Sub EnumerationOptionsExample()

        Try
            ' Set a variable to the My Documents Path.
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            ' Set the options for the enumeration.
            Dim options As New EnumerationOptions() With {
                .IgnoreInaccessible = True,
                .MatchCasing = MatchCasing.CaseInsensitive,
                .MatchType = MatchType.Simple,
                .RecurseSubdirectories = True
            }

            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", options)
                        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.curFile}\t{f.curLine}")
            Next

            Console.WriteLine($"{files.Count} files found.")
        Catch pathEx As PathTooLongException
            Console.WriteLine(pathEx.Message)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

    End Sub
End Class

설명

searchPattern 는 리터럴과 와일드카드 문자의 조합일 수 있지만 정규식을 지원하지는 않습니다. 다음 와일드카드 지정자는 .에서 searchPattern허용됩니다.

와일드카드 지정자 검색 결과
* (별표) 해당 위치에 있는 문자가 0개 이상입니다.
? (물음표) 정확히 그 위치에 있는 한 문자입니다.

와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern 문자열 "*t"는 문자 "t"로 끝나는 모든 이름을 path 검색합니다. 문자열 "s*"는 searchPattern 문자 "s"로 path 시작하는 모든 이름을 검색합니다.

Note

.NET Framework only:searchPattern 별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하면 이 메서드는 확장명을 지정한 확장명을 begin로 반환합니다. 예를 들어 검색 패턴 "*.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
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern 는 두 개의 마침표("..")로 끝나거나 두 개의 마침표("..") DirectorySeparatorChar 를 포함하거나 AltDirectorySeparatorChar잘못된 문자를 포함할 수 없습니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars 수 있습니다.

매개 변수를 path 사용하여 상대 경로 정보를 지정할 수 있습니다. 상대 경로 정보는 메서드를 사용하여 GetCurrentDirectory 확인할 수 있는 현재 작업 디렉터리를 기준으로 해석됩니다.

메서드와 GetFiles 메서드는 EnumerateFiles 다음과 같이 다릅니다. 사용하는 EnumerateFiles경우 전체 컬렉션이 반환되기 전에 이름 컬렉션을 열거할 수 있습니다. 사용하는 GetFiles경우 배열에 액세스하기 전에 전체 이름 배열이 반환될 때까지 기다려야 합니다. 따라서 많은 파일 및 디렉터리 EnumerateFiles 로 작업하는 경우 더 효율적일 수 있습니다.

반환된 컬렉션은 캐시되지 않습니다. 컬렉션에 GetEnumerator 대한 각 호출은 새 열거형을 시작합니다.

적용 대상

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

검색 작업에 현재 디렉터리만 포함할지 아니면 모든 하위 디렉터리를 포함해야 하는지를 지정하는 열거형 값 중 하나입니다. 기본값은 TopDirectoryOnly입니다.

반품

지정한 디렉터리에서 지정된 path 검색 패턴 및 검색 옵션과 일치하는 파일에 대한 전체 이름(경로 포함)의 열거 가능한 컬렉션입니다.

예외

.NET Framework 및 .NET Core 버전이 2.1보다 오래된 경우: path 길이가 0인 문자열이거나 공백만 포함하거나 잘못된 문자를 포함합니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars() 수 있습니다.

-또는-

searchPattern 은 유효한 패턴을 포함하지 않습니다.

pathnull입니다.

-또는-

searchPatternnull입니다.

searchOption 가 유효한 SearchOption 값이 아닌 경우

path 가 잘못되었습니다(예: 매핑되지 않은 드라이브를 참조하는 경우).

path 은 파일 이름입니다.

지정된 경로, 파일 이름 또는 결합이 시스템 정의 최대 길이를 초과합니다.

호출자에게 필요한 권한이 없습니다.

호출자에게 필요한 권한이 없습니다.

예제

다음 예제에서는 디렉터리와 해당 하위 디렉터리의 모든 텍스트 파일을 검색하고 새 디렉터리로 이동하는 방법을 보여 있습니다. 파일을 이동한 후에는 원래 디렉터리에 더 이상 존재하지 않습니다.

using System;
using System.IO;

partial class Example1
{
    static void SearchOptionExample()
    {
        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

Partial Class Example1
    Shared Sub SearchOptionsExample()

        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 Class

다음 예제에서는 확장명이 .txt 있는 모든 파일을 재귀적으로 열거하고, 파일의 각 줄을 읽고, "Microsoft" 문자열이 포함된 경우 줄을 표시합니다.

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

partial class Example2
{
    static void SearchOptionExample()
    {
        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()} 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

Partial Class Example2
    Shared Sub SearchOptionExample()

        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.curFile}\t{f.curLine}")
            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 Class

설명

searchPattern 는 리터럴과 와일드카드 문자의 조합일 수 있지만 정규식을 지원하지는 않습니다. 다음 와일드카드 지정자는 .에서 searchPattern허용됩니다.

와일드카드 지정자 검색 결과
* (별표) 해당 위치에 있는 문자가 0개 이상입니다.
? (물음표) 정확히 그 위치에 있는 한 문자입니다.

와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern 문자열 "*t"는 문자 "t"로 끝나는 모든 이름을 path 검색합니다. 문자열 "s*"는 searchPattern 문자 "s"로 path 시작하는 모든 이름을 검색합니다.

Note

.NET Framework only:searchPattern 별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하면 이 메서드는 확장명을 지정한 확장명을 begin로 반환합니다. 예를 들어 검색 패턴 "*.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
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern 는 두 개의 마침표("..")로 끝나거나 두 개의 마침표("..") 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

검색할 디렉터리의 상대 또는 절대 경로입니다. 이 문자열은 대/소문자를 구분하지 않습니다.

반품

로 지정된 path디렉터리의 파일에 대한 전체 이름(경로 포함)의 열거 가능한 컬렉션입니다.

예외

.NET Framework 및 .NET Core 버전이 2.1보다 오래된 경우: path 길이가 0인 문자열이거나 공백만 포함하거나 잘못된 문자를 포함합니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars() 수 있습니다.

pathnull입니다.

path 가 잘못되었습니다(예: 매핑되지 않은 드라이브를 참조하는 경우).

path 은 파일 이름입니다.

지정된 경로, 파일 이름 또는 결합이 시스템 정의 최대 길이를 초과합니다.

호출자에게 필요한 권한이 없습니다.

호출자에게 필요한 권한이 없습니다.

예제

다음 예제에서는 디렉터리의 모든 파일을 검색하고 새 디렉터리로 이동하는 방법을 보여줍니다. 파일을 이동한 후에는 원래 디렉터리에 더 이상 존재하지 않습니다.

using System;
using System.IO;

partial class Example1
{
    static void OneStringExample()
    {
        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

Partial Class Example1
    Shared Sub OneStringExample()

        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 Class

다음 예제에서는 지정된 디렉터리의 파일을 열거하고, 파일의 각 줄을 읽고, 문자열 "Europe"이 포함된 경우 줄을 표시합니다.

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

partial class Example2
{
    static void OneStringExample()
    {
        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

Partial Class Example2
    Shared Sub OneStringExample()

        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 Class

설명

매개 변수를 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파일의 이름과 일치시킬 검색 문자열입니다. 이 매개 변수는 유효한 리터럴 경로와 와일드카드(* 및 ?) 문자의 조합을 포함할 수 있지만 정규식을 지원하지는 않습니다.

반품

지정된 path 검색 패턴과 일치하는 디렉터리의 파일에 대한 전체 이름(경로 포함)의 열거 가능한 컬렉션입니다.

예외

.NET Framework 및 .NET Core 버전이 2.1보다 오래된 경우: path 길이가 0인 문자열이거나 공백만 포함하거나 잘못된 문자를 포함합니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars() 수 있습니다.

-또는-

searchPattern 은 유효한 패턴을 포함하지 않습니다.

pathnull입니다.

-또는-

searchPatternnull입니다.

path 가 잘못되었습니다(예: 매핑되지 않은 드라이브를 참조하는 경우).

path 은 파일 이름입니다.

지정된 경로, 파일 이름 또는 결합이 시스템 정의 최대 길이를 초과합니다.

호출자에게 필요한 권한이 없습니다.

호출자에게 필요한 권한이 없습니다.

예제

다음 예제에서는 디렉터리의 모든 텍스트 파일을 검색하고 새 디렉터리로 이동하는 방법을 보여줍니다. 파일을 이동한 후에는 원래 디렉터리에 더 이상 존재하지 않습니다.

using System;
using System.IO;

partial class Example1
{
    static void TwoStringsExample()
    {
        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

Partial Class Example1
    Shared Sub TwoStringExample()

        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 Class

다음 예제에서는 ".txt" 확장명이 있는 지정된 디렉터리의 파일을 열거하고 파일의 각 줄을 읽고 문자열 "Europe"이 포함된 경우 줄을 표시합니다.

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

partial class Example2
{
    static void TwoStringsExample()
    {
        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

Partial Class Example2
    Shared Sub TwoStringsExample()

        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 Class

설명

searchPattern 는 리터럴과 와일드카드 문자의 조합일 수 있지만 정규식을 지원하지는 않습니다. 다음 와일드카드 지정자는 .에서 searchPattern허용됩니다.

와일드카드 지정자 검색 결과
* (별표) 해당 위치에 있는 문자가 0개 이상입니다.
? (물음표) 정확히 그 위치에 있는 한 문자입니다.

와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern 문자열 "*t"는 문자 "t"로 끝나는 모든 이름을 path 검색합니다. 문자열 "s*"는 searchPattern 문자 "s"로 path 시작하는 모든 이름을 검색합니다.

Note

.NET Framework only:searchPattern 별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하면 이 메서드는 확장명을 지정한 확장명을 begin로 반환합니다. 예를 들어 검색 패턴 "*.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
ello.txt, hello.txt, hello.txtt ?ello.txt hello.txt hello.txt

searchPattern 는 두 개의 마침표("..")로 끝나거나 두 개의 마침표("..") DirectorySeparatorChar 를 포함하거나 AltDirectorySeparatorChar잘못된 문자를 포함할 수 없습니다. 메서드를 사용하여 잘못된 문자를 쿼리할 GetInvalidPathChars 수 있습니다.

매개 변수를 path 사용하여 상대 경로 정보를 지정할 수 있습니다. 상대 경로 정보는 메서드를 사용하여 GetCurrentDirectory 확인할 수 있는 현재 작업 디렉터리를 기준으로 해석됩니다.

및 메서드는 EnumerateFiles 다음과 같이 다릅니다. 사용할 EnumerateFiles때 전체 컬렉션이 반환되기 전에 이름 컬렉션을 열거할 수 있습니다. 사용할 GetFiles때는 전체 이름 배열이 반환될 때까지 기다려야 배열에 액세스할 수 GetFiles 있습니다. 따라서 많은 파일 및 디렉터리 EnumerateFiles 로 작업하는 경우 더 효율적일 수 있습니다.

반환된 컬렉션은 캐시되지 않습니다. 컬렉션에 GetEnumerator 대한 각 호출은 새 열거형을 시작합니다.

적용 대상