Directory.EnumerateFiles 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 조건을 충족하는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다.
오버로드
EnumerateFiles(String, String, SearchOption) |
지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다. |
EnumerateFiles(String, String, EnumerationOptions) |
지정된 경로에서 검색 패턴 및 열거형 옵션과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다. |
EnumerateFiles(String) |
지정된 경로에 있는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다. |
EnumerateFiles(String, String) |
지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다. |
EnumerateFiles(String, String, SearchOption)
- Source:
- Directory.cs
- Source:
- Directory.cs
- Source:
- Directory.cs
지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
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
에서 지정된 디렉토리에 있고 지정된 검색 패턴 및 검색 옵션과 일치하는 파일에 대한 전체 이름(경로 포함)의 열거 가능 컬렉션입니다.
예외
2.1보다 오래된 .NET Framework 및 .NET Core 버전: path
길이가 0인 문자열이거나, 공백만 포함하거나, 잘못된 문자를 포함합니다.
GetInvalidPathChars() 메서드를 사용하여 잘못된 문자를 쿼리할 수 있습니다.
또는
searchPattern
에 유효한 패턴이 포함되어 있지 않습니다.
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개 이상의 문자가 있습니다. |
? (물음표) | 해당 위치에 정확히 한 문자가 있습니다. |
와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern
문자열 "*t"는 문자 "t"로 끝나는 의 모든 이름을 path
검색합니다. 문자열 "s*"는 searchPattern
문자 "s"로 path
시작하는 의 모든 이름을 검색합니다.
참고
.NET Framework 전용: 에서 searchPattern
별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하는 경우 이 메서드는 지정된 확장으로 시작하는 확장명을 가진 파일도 반환합니다. 예를 들어 검색 패턴 "*.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, EnumerationOptions)
- Source:
- Directory.cs
- Source:
- Directory.cs
- Source:
- Directory.cs
지정된 경로에서 검색 패턴 및 열거형 옵션과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
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
로 지정되고 지정된 검색 패턴 및 옵션과 일치하는 디렉터리에서 파일에 대한 전체 이름(경로 포함)의 열거 가능 컬렉션입니다.
예외
2.1보다 오래된 .NET Framework 및 .NET Core 버전: path
길이가 0인 문자열이거나, 공백만 포함하거나, 잘못된 문자를 포함합니다.
GetInvalidPathChars() 메서드를 사용하여 잘못된 문자를 쿼리할 수 있습니다.
또는
searchPattern
에 유효한 패턴이 포함되어 있지 않습니다.
searchOption
는 유효한 SearchOption 값이 아닙니다.
path
가 잘못되었습니다(예: 매핑되지 않은 드라이브 참조).
path
는 파일 이름입니다.
지정된 경로, 파일 이름 또는 이 둘의 조합이 시스템에서 정의한 최대 길이를 초과합니다.
호출자에게 필요한 권한이 없는 경우
설명
searchPattern
는 리터럴 문자와 와일드카드 문자의 조합일 수 있지만 정규식을 지원하지는 않습니다. 에서 허용되는 와일드카드 지정자는 다음과 같습니다 searchPattern
.
와일드카드 지정자 | 일치하는 항목 |
---|---|
*(별표) | 해당 위치에 0개 이상의 문자가 있습니다. |
? (물음표) | 해당 위치에 정확히 한 문자가 있습니다. |
와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern
문자열 "*t"는 문자 "t"로 끝나는 의 모든 이름을 path
검색합니다. 문자열 "s*"는 searchPattern
문자 "s"로 path
시작하는 의 모든 이름을 검색합니다.
참고
.NET Framework 전용: 에서 searchPattern
별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하는 경우 이 메서드는 지정된 확장으로 시작하는 확장명을 가진 파일도 반환합니다. 예를 들어 검색 패턴 "*.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)
- Source:
- Directory.cs
- Source:
- Directory.cs
- Source:
- Directory.cs
지정된 경로에 있는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다.
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
로 지정된 파일에서 디렉터리에 대한 전체 이름(경로 포함)의 열거 가능 컬렉션입니다.
예외
2.1보다 오래된 .NET Framework 및 .NET Core 버전: path
길이가 0인 문자열이거나, 공백만 포함하거나, 잘못된 문자를 포함합니다.
GetInvalidPathChars() 메서드를 사용하여 잘못된 문자를 쿼리할 수 있습니다.
path
이(가) null
인 경우
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)
- Source:
- Directory.cs
- Source:
- Directory.cs
- Source:
- Directory.cs
지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다.
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
로 지정되고 지정된 검색 패턴과 일치하는 디렉터리에서 파일에 대한 전체 이름(경로 포함)의 열거 가능 컬렉션입니다.
예외
2.1보다 오래된 .NET Framework 및 .NET Core 버전: path
길이가 0인 문자열이거나, 공백만 포함하거나, 잘못된 문자를 포함합니다.
GetInvalidPathChars() 메서드를 사용하여 잘못된 문자를 쿼리할 수 있습니다.
또는
searchPattern
에 유효한 패턴이 포함되어 있지 않습니다.
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개 이상의 문자가 있습니다. |
? (물음표) | 해당 위치에 정확히 한 문자가 있습니다. |
와일드카드 이외의 문자는 리터럴 문자입니다. 예를 들어 searchPattern
문자열 "*t"는 문자 "t"로 끝나는 의 모든 이름을 path
검색합니다. 문자열 "s*"는 searchPattern
문자 "s"로 path
시작하는 의 모든 이름을 검색합니다.
참고
.NET Framework 전용: 에서 searchPattern
별표 와일드카드 문자를 사용하고 3자 파일 확장명(예: "*.txt")을 지정하는 경우 이 메서드는 지정된 확장으로 시작하는 확장명을 가진 파일도 반환합니다. 예를 들어 검색 패턴 "*.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 대한 각 호출은 새 열거형을 시작합니다.
적용 대상
.NET