Directory.EnumerateFiles Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает перечисленную коллекцию полных имен файлов, удовлетворяющих указанным критериям.
Перегрузки
| Имя | Описание |
|---|---|
| EnumerateFiles(String, String, SearchOption) |
Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска в указанном пути, и при необходимости выполняет поиск подкаталогов. |
| EnumerateFiles(String, String, EnumerationOptions) |
Возвращает перечисленную коллекцию полных имен файлов, соответствующих шаблону поиска и параметрам перечисления в указанном пути, а также при необходимости выполняет поиск подкаталогов. |
| EnumerateFiles(String) |
Возвращает перечисленную коллекцию полных имен файлов в указанном пути. |
| EnumerateFiles(String, String) |
Возвращает перечисленную коллекцию полных имен файлов, которые соответствуют шаблону поиска в указанном пути. |
EnumerateFiles(String, String, SearchOption)
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- 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 в каталоге, и соответствующая указанному шаблону поиска и параметру поиска.
Исключения
.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода 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.
| Описатель подстановочных знаков | Совпадения |
|---|---|
| * (звездочка) | Ноль или больше символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".
Note
.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .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 Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.
Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.
Применяется к
EnumerateFiles(String, String, EnumerationOptions)
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- 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 в каталоге, и совпадающая с указанными параметрами поиска и перечисления.
Исключения
.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода 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.
| Описатель подстановочных знаков | Совпадения |
|---|---|
| * (звездочка) | Ноль или больше символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".
Note
.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .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 Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.
Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.
Применяется к
EnumerateFiles(String)
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- 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.
Исключения
.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода 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
В следующем примере перечисляются файлы в указанном каталоге, считывается каждая строка файла и отображается строка, если она содержит строку "Европа".
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 , который можно определить с помощью метода.
EnumerateFiles Методы GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен перед возвратом всей коллекции. При использовании GetFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву. Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.
Возвращенная коллекция не кэшируется; каждый вызов GetEnumerator коллекции запустит новое перечисление.
Применяется к
EnumerateFiles(String, String)
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- Directory.cs
- Исходный код:
- 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 в каталоге, и соответствующая указанному шаблону поиска.
Исключения
.NET Framework и .NET Core версии старше 2.1: path является строкой нулевой длины, содержит только пробелы или содержит недопустимые символы. Вы можете запросить недопустимые символы с помощью метода 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", считывает каждую строку файла и отображает строку, если она содержит строку "Европа".
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.
| Описатель подстановочных знаков | Совпадения |
|---|---|
| * (звездочка) | Ноль или больше символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" выполняет поиск всех имен в path конце буквы "t". Строка searchPattern "s*" выполняет поиск всех имен, path начиная с буквы "s".
Note
.NET Framework only: При использовании подстановочного знака звездочки в searchPattern и указано трехзначное расширение файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые begin с указанным расширением. Например, шаблон поиска "*.xls" возвращает оба "book.xls" и "book.xlsx". Это поведение происходит только в том случае, если звездочка используется в шаблоне поиска, а расширение файла предоставляется ровно три символа. Если вы используете подстановочный знак вопросительного знака где-то в шаблоне поиска, этот метод возвращает только файлы, соответствующие указанному расширению файла. В следующей таблице показана аномалия в .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 отличаются следующим образом: при использовании GetFilesможно начать перечисление коллекции имен до возврата всей коллекции. При использовании EnumerateFilesнеобходимо дождаться возврата всего массива имен, прежде чем получить доступ к массиву.GetFiles Поэтому при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.
Возвращаемая коллекция не кэшируется. Каждый вызов GetEnumerator коллекции запускает новое перечисление.