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
Возвращает перечисляемую коллекцию полных имен файлов, соответствующих шаблону поиска по указанному пути. Возможно, поиск ведется также и в подкаталогах.
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;
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.
| Описатель подстановочных знаков | Соответствует |
|---|---|
| * (звездочка) | Ноль или более символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" ищет все имена, path заканчивающиеся буквой "t". Строка searchPattern "s*" ищет все имена, path начинающиеся с буквы "s".
Примечание
Только платформа .NET Framework. При использовании подстановочного знака звездочки в searchPattern и указании трехзначного расширения файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые начинаются с указанного расширения. Например, шаблон поиска "*.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
Возвращает перечисляемую коллекцию полных имен файлов, соответствующих шаблону поиска и параметрам перечисления по указанному пути. Возможно, поиск ведется также и в подкаталогах.
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 не содержит допустимый шаблон.
searchOption не является допустимым значением SearchOption.
Недопустимый path: например, он ссылается на несопоставленный диск.
path — это имя файла.
Указанный путь, имя файла или их комбинация превышает максимальную длину, заданную в системе.
У вызывающего объекта отсутствует необходимое разрешение.
Комментарии
searchPattern может быть сочетанием литеральных и подстановочных знаков, но не поддерживает регулярные выражения. Следующие описатели с подстановочными знаками разрешены в searchPattern.
| Описатель подстановочных знаков | Соответствует |
|---|---|
| * (звездочка) | Ноль или более символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" ищет все имена, path заканчивающиеся буквой "t". Строка searchPattern "s*" ищет все имена, path начинающиеся с буквы "s".
Примечание
Только платформа .NET Framework. При использовании подстановочного знака звездочки в searchPattern и указании трехзначного расширения файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые начинаются с указанного расширения. Например, шаблон поиска "*.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
Возвращает перечисляемую коллекцию полных имен файлов, расположенных по указанному пути.
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;
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 метода .
Методы EnumerateFiles и GetFiles отличаются следующим образом: при использовании EnumerateFilesможно начать перечисление коллекции имен до возвращения всей коллекции. При использовании GetFilesнеобходимо дождаться возвращения всего массива имен, прежде чем получить доступ к массиву. Таким образом, при работе с большим количеством файлов и каталогов EnumerateFiles может быть более эффективным.
Возвращаемая коллекция не кэшируется; Каждый вызов в GetEnumerator коллекции будет запускать новое перечисление.
Применяется к
EnumerateFiles(String, String)
- Исходный код:
- 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;
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.
| Описатель подстановочных знаков | Соответствует |
|---|---|
| * (звездочка) | Ноль или более символов в этой позиции. |
| ? (вопросительный знак) | Ровно один символ в этой позиции. |
Символы, отличные от подстановочного знака, являются литеральными символами. Например, searchPattern строка "*t" ищет все имена, path заканчивающиеся буквой "t". Строка searchPattern "s*" ищет все имена, path начинающиеся с буквы "s".
Примечание
Только платформа .NET Framework. При использовании подстановочного знака звездочки в searchPattern и указании трехзначного расширения файла, например "*.txt", этот метод также возвращает файлы с расширениями, которые начинаются с указанного расширения. Например, шаблон поиска "*.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 коллекции запускает новое перечисление.