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 коллекции запускает новое перечисление.