Directory.EnumerateFiles 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 조건을 충족하는 전체 파일 이름의 열거 가능한 컬렉션을 반환합니다.
오버로드
| 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 은 유효한 패턴을 포함하지 않습니다.
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 은 유효한 패턴을 포함하지 않습니다.
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() 수 있습니다.
path은 null입니다.
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 은 유효한 패턴을 포함하지 않습니다.
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 대한 각 호출은 새 열거형을 시작합니다.