Directory.EnumerateFiles Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí výčtovou kolekci úplných názvů souborů, které splňují zadaná kritéria.
Přetížení
| Name | Description |
|---|---|
| EnumerateFiles(String, String, SearchOption) |
Vrátí výčet kolekcí úplných názvů souborů, které odpovídají vzoru hledání v zadané cestě, a volitelně prohledává podadresáře. |
| EnumerateFiles(String, String, EnumerationOptions) |
Vrátí výčtovou kolekci úplných názvů souborů, které odpovídají vzoru hledání a možnostem výčtu v zadané cestě a volitelně prohledává podadresáře. |
| EnumerateFiles(String) |
Vrátí výčtovou kolekci úplných názvů souborů v zadané cestě. |
| EnumerateFiles(String, String) |
Vrátí výčet kolekcí úplných názvů souborů, které odpovídají vzoru hledání v zadané cestě. |
EnumerateFiles(String, String, SearchOption)
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
Vrátí výčet kolekcí úplných názvů souborů, které odpovídají vzoru hledání v zadané cestě, a volitelně prohledává podadresáře.
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)
Parametry
- path
- String
Relativní nebo absolutní cesta k adresáři, který se má prohledávat. Tento řetězec nerozlišuje malá a velká písmena.
- searchPattern
- String
Hledaný řetězec, který se má shodovat s názvy souborů v pathsouboru . Tento parametr může obsahovat kombinaci platných znaků literálu a zástupných znaků (* a ?), ale nepodporuje regulární výrazy.
- searchOption
- SearchOption
Jedna z hodnot výčtu, která určuje, zda by operace vyhledávání měla obsahovat pouze aktuální adresář nebo by měla obsahovat všechny podadresáře. Výchozí hodnota je TopDirectoryOnly.
Návraty
Enumerable kolekce úplných názvů (včetně cest) pro soubory v adresáři určeném path a které odpovídají zadanému vzoru hledání a možnosti hledání.
Výjimky
.NET Framework a verze .NET Core starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars() .
nebo
searchPattern neobsahuje platný vzor.
searchOption není platná SearchOption hodnota.
path je neplatný, například odkaz na nenamapovanou jednotku.
path je název souboru.
Zadaná cesta, název souboru nebo kombinovaná hodnota překračuje maximální délku definovanou systémem.
Volající nemá požadované oprávnění.
Volající nemá požadované oprávnění.
Příklady
Následující příklad ukazuje, jak načíst všechny textové soubory v adresáři a jeho podadresářích a přesunout je do nového adresáře. Po přesunutí souborů už v původních adresářích neexistují.
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
Následující příklad rekurzivně vytvoří výčet všech souborů, které mají příponu .txt, přečte každý řádek souboru a zobrazí řádek, pokud obsahuje řetězec "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
Poznámky
searchPattern může být kombinací literálů a zástupných znaků, ale nepodporuje regulární výrazy. Následující specifikátory zástupných znaků jsou povoleny v searchPattern.
| Specifikátor zástupných znaků | Shody |
|---|---|
| * (hvězdička) | V této pozici je nula nebo více znaků. |
| ? (otazník) | Přesně jeden znak v této pozici. |
Jiné znaky než zástupné znaky jsou literální znaky. Například searchPattern řetězec "*t" vyhledá všechny názvy path končící písmenem "t". Řetězec searchPattern "s*" vyhledá všechny názvy začínající path písmenem "s".
Note
.NET Framework only: Pokud v searchPattern použijete zástupný znak hvězdičky a zadáte příponu tříznakových souborů, například "*.txt", vrátí tato metoda také soubory s příponami, které begin se zadanou příponou. Například vzorec hledání "*.xls" vrátíbook.xls" a "book.xlsx". K tomuto chování dochází pouze v případě, že hvězdička se používá ve vzoru hledání a zadanou příponu souboru jsou přesně tři znaky. Pokud použijete zástupný znak otazníku někde ve vzoru hledání, vrátí tato metoda pouze soubory, které přesně odpovídají zadané příponě souboru. Následující tabulka znázorňuje tuto anomálii v .NET Frameworku.
| Soubory v adresáři | Vzor hledání | .NET 5+ vrátí | .NET Framework vrací |
|---|---|---|---|
| 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 nemůže končit dvěma tečkami (".") nebo obsahovat dvě tečky (..) následované DirectorySeparatorChar nebo AltDirectorySeparatorChar, ani nesmí obsahovat neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars .
Pomocí parametru můžete zadat relativní informace o cestě path . Relativní informace o cestě se interpretují jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody.
Tyto EnumerateFiles metody se GetFiles liší takto: Při použití EnumerateFilesmůžete zahájit výčet kolekce názvů před vrácením celé kolekce. Při použití GetFilesmusíte počkat na vrácení celé pole názvů, než budete mít přístup k poli. Proto při práci s mnoha soubory a adresáři EnumerateFiles může být efektivnější.
Vrácená kolekce není uložena do mezipaměti. Každé volání GetEnumerator kolekce spustí nový výčet.
Platí pro
EnumerateFiles(String, String, EnumerationOptions)
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
Vrátí výčtovou kolekci úplných názvů souborů, které odpovídají vzoru hledání a možnostem výčtu v zadané cestě a volitelně prohledává podadresáře.
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)
Parametry
- path
- String
Relativní nebo absolutní cesta k adresáři, který se má prohledávat. Tento řetězec nerozlišuje malá a velká písmena.
- searchPattern
- String
Hledaný řetězec, který se má shodovat s názvy souborů v pathsouboru . Tento parametr může obsahovat kombinaci platných znaků literálu a zástupných znaků (* a ?), ale nepodporuje regulární výrazy.
- enumerationOptions
- EnumerationOptions
Objekt, který popisuje konfiguraci vyhledávání a výčtu, která se má použít.
Návraty
Výčtová kolekce úplných názvů (včetně cest) pro soubory v adresáři určeném path pomocí zadaného vzoru hledání a možností výčtu.
Výjimky
.NET Framework a verze .NET Core starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars() .
nebo
searchPattern neobsahuje platný vzor.
path je neplatný, například odkaz na nenamapovanou jednotku.
path je název souboru.
Zadaná cesta, název souboru nebo kombinovaná hodnota překračuje maximální délku definovanou systémem.
Volající nemá požadované oprávnění.
Příklady
Následující příklad ukazuje, jak načíst všechny textové soubory v adresáři a jeho podadresářích a přesunout je do nového adresáře. Po přesunutí souborů už v původních adresářích neexistují.
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
Následující příklad rekurzivně vytvoří výčet všech souborů s příponou .txt a ignoruje nepřístupné adresáře a soubory. Přečte každý řádek souboru a zobrazí řádek, pokud obsahuje řetězec "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
Poznámky
searchPattern může být kombinací literálů a zástupných znaků, ale nepodporuje regulární výrazy. Následující specifikátory zástupných znaků jsou povoleny v searchPattern.
| Specifikátor zástupných znaků | Shody |
|---|---|
| * (hvězdička) | V této pozici je nula nebo více znaků. |
| ? (otazník) | Přesně jeden znak v této pozici. |
Jiné znaky než zástupné znaky jsou literální znaky. Například searchPattern řetězec "*t" vyhledá všechny názvy path končící písmenem "t". Řetězec searchPattern "s*" vyhledá všechny názvy začínající path písmenem "s".
Note
.NET Framework only: Pokud v searchPattern použijete zástupný znak hvězdičky a zadáte příponu tříznakových souborů, například "*.txt", vrátí tato metoda také soubory s příponami, které begin se zadanou příponou. Například vzorec hledání "*.xls" vrátíbook.xls" a "book.xlsx". K tomuto chování dochází pouze v případě, že hvězdička se používá ve vzoru hledání a zadanou příponu souboru jsou přesně tři znaky. Pokud použijete zástupný znak otazníku někde ve vzoru hledání, vrátí tato metoda pouze soubory, které přesně odpovídají zadané příponě souboru. Následující tabulka znázorňuje tuto anomálii v .NET Frameworku.
| Soubory v adresáři | Vzor hledání | .NET 5+ vrátí | .NET Framework vrací |
|---|---|---|---|
| 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 nemůže končit dvěma tečkami (".") nebo obsahovat dvě tečky (..) následované DirectorySeparatorChar nebo AltDirectorySeparatorChar, ani nesmí obsahovat neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars .
Pomocí parametru můžete zadat relativní informace o cestě path . Relativní informace o cestě se interpretují jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody.
Tyto EnumerateFiles metody se GetFiles liší takto: Při použití EnumerateFilesmůžete zahájit výčet kolekce názvů před vrácením celé kolekce. Při použití GetFilesmusíte počkat na vrácení celé pole názvů, než budete mít přístup k poli. Proto při práci s mnoha soubory a adresáři EnumerateFiles může být efektivnější.
Vrácená kolekce není uložena do mezipaměti. Každé volání GetEnumerator kolekce spustí nový výčet.
Platí pro
EnumerateFiles(String)
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
Vrátí výčtovou kolekci úplných názvů souborů v zadané cestě.
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)
Parametry
- path
- String
Relativní nebo absolutní cesta k adresáři, který se má prohledávat. Tento řetězec nerozlišuje malá a velká písmena.
Návraty
Výčtová kolekce úplných názvů (včetně cest) pro soubory v adresáři určeném uživatelem path.
Výjimky
.NET Framework a verze .NET Core starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars() .
path je null.
path je neplatný, například odkaz na nenamapovanou jednotku.
path je název souboru.
Zadaná cesta, název souboru nebo kombinovaná hodnota překračuje maximální délku definovanou systémem.
Volající nemá požadované oprávnění.
Volající nemá požadované oprávnění.
Příklady
Následující příklad ukazuje, jak načíst všechny soubory v adresáři a přesunout je do nového adresáře. Po přesunutí souborů už v původním adresáři neexistují.
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
Následující příklad vytvoří výčet souborů v zadaném adresáři, přečte každý řádek souboru a zobrazí řádek, pokud obsahuje řetězec "Evropa".
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
Poznámky
Pomocí parametru můžete zadat relativní informace o cestě path . Relativní informace o cestě se interpretují jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody.
Tyto EnumerateFiles metody se GetFiles liší takto: Při použití EnumerateFilesmůžete zahájit výčet kolekce názvů před vrácením celé kolekce. Při použití GetFilesmusíte počkat na vrácení celé pole názvů, než budete mít přístup k poli. Proto při práci s mnoha soubory a adresáři EnumerateFiles může být efektivnější.
Vrácená kolekce není uložena v mezipaměti; každé volání GetEnumerator kolekce spustí nový výčet.
Platí pro
EnumerateFiles(String, String)
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
- Zdroj:
- Directory.cs
Vrátí výčet kolekcí úplných názvů souborů, které odpovídají vzoru hledání v zadané cestě.
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)
Parametry
- path
- String
Relativní nebo absolutní cesta k adresáři, který se má prohledávat. Tento řetězec nerozlišuje malá a velká písmena.
- searchPattern
- String
Hledaný řetězec, který se má shodovat s názvy souborů v pathsouboru . Tento parametr může obsahovat kombinaci platných znaků literálu a zástupných znaků (* a ?), ale nepodporuje regulární výrazy.
Návraty
Výčet úplných názvů (včetně cest) pro soubory v adresáři určeném path a odpovídající zadanému vzoru hledání.
Výjimky
.NET Framework a verze .NET Core starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars() .
nebo
searchPattern neobsahuje platný vzor.
path je neplatný, například odkaz na nenamapovanou jednotku.
path je název souboru.
Zadaná cesta, název souboru nebo kombinovaná hodnota překračuje maximální délku definovanou systémem.
Volající nemá požadované oprávnění.
Volající nemá požadované oprávnění.
Příklady
Následující příklad ukazuje, jak načíst všechny textové soubory v adresáři a přesunout je do nového adresáře. Po přesunutí souborů už v původním adresáři neexistují.
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
Následující příklad vyčíslí soubory v zadaném adresáři, které mají příponu ".txt", přečte každý řádek souboru a zobrazí řádek, pokud obsahuje řetězec "Evropa".
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
Poznámky
searchPattern může být kombinací literálů a zástupných znaků, ale nepodporuje regulární výrazy. Následující specifikátory zástupných znaků jsou povoleny v searchPattern.
| Specifikátor zástupných znaků | Shody |
|---|---|
| * (hvězdička) | V této pozici je nula nebo více znaků. |
| ? (otazník) | Přesně jeden znak v této pozici. |
Jiné znaky než zástupné znaky jsou literální znaky. Například searchPattern řetězec "*t" vyhledá všechny názvy path končící písmenem "t". Řetězec searchPattern "s*" vyhledá všechny názvy začínající path písmenem "s".
Note
.NET Framework only: Pokud v searchPattern použijete zástupný znak hvězdičky a zadáte příponu tříznakových souborů, například "*.txt", vrátí tato metoda také soubory s příponami, které begin se zadanou příponou. Například vzorec hledání "*.xls" vrátíbook.xls" a "book.xlsx". K tomuto chování dochází pouze v případě, že hvězdička se používá ve vzoru hledání a zadanou příponu souboru jsou přesně tři znaky. Pokud použijete zástupný znak otazníku někde ve vzoru hledání, vrátí tato metoda pouze soubory, které přesně odpovídají zadané příponě souboru. Následující tabulka znázorňuje tuto anomálii v .NET Frameworku.
| Soubory v adresáři | Vzor hledání | .NET 5+ vrátí | .NET Framework vrací |
|---|---|---|---|
| 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 nemůže končit dvěma tečkami (".") nebo obsahovat dvě tečky (..) následované DirectorySeparatorChar nebo AltDirectorySeparatorChar, ani nesmí obsahovat neplatné znaky. Pomocí metody můžete zadat dotaz na neplatné znaky GetInvalidPathChars .
Pomocí parametru můžete zadat relativní informace o cestě path . Relativní informace o cestě se interpretují jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody.
Tyto EnumerateFiles metody se GetFiles liší takto: Při použití EnumerateFilesmůžete začít vytvářet výčet názvů před vrácením celé kolekce. Při použití GetFilesmusíte počkat na vrácení celé pole názvů, než budete mít přístup k poli. Proto při práci s mnoha soubory a adresáři EnumerateFiles může být efektivnější.
Vrácená kolekce není uložena do mezipaměti. Každé volání GetEnumerator kolekce spustí nový výčet.