Sdílet prostřednictvím


Directory.EnumerateFiles Metoda

Definice

Vrátí výčet kolekcí úplných názvů souborů, které splňují zadaná kritéria.

Přetížení

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á 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á 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

Vrátí výčet kolekcí úplných názvů souborů, které odpovídají vzoru hledání v zadané cestě, a volitelně prohledá 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ý chcete vyhledat. Tento řetězec neodlišuje velká a malá 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 literálových cest a zástupných znaků (* a ?), ale nepodporuje regulární výrazy.

searchOption
SearchOption

Jedna z hodnot výčtu, která určuje, zda má operace hledání obsahovat pouze aktuální adresář nebo by měla zahrnovat všechny podadresáře. Výchozí hodnota je TopDirectoryOnly.

Návraty

Výčetná kolekce úplných jmen (včetně cest) pro soubory v adresáři určeném a path které odpovídají zadanému vzoru hledání a možnosti hledání.

Výjimky

.NET Framework a .NET Core verze starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody se můžete dotazovat na neplatné znaky GetInvalidPathChars() .

-nebo-

searchPattern neobsahuje platný vzor.

path je null.

-nebo-

searchPattern je null.

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 kombinace 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í už soubory v původních adresářích neexistují.

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

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;

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

Poznámky

searchPattern může být kombinací literálu a zástupných znaků, ale nepodporuje regulární výrazy. V systému jsou povoleny následující specifikátory zástupných searchPatternznaků.

Specifikátor zástupných znaků Shody
* (hvězdička) Na této pozici není žádný nebo více znaků.
? (otazník) Přesně jeden znak v této pozici.

Jiné znaky než zástupný znak jsou literálové znaky. Například searchPattern řetězec "*t" vyhledá všechna jména končící path písmenem "t". Řetězec searchPattern "s*" vyhledá všechna jména začínající path písmenem "s".

Poznámka

Pouze rozhraní .NET Framework: Pokud použijete zástupný znak hvězdičky v searchPattern a zadáte tříznakovou příponu souboru, například "*.txt", vrátí tato metoda také soubory s příponami, které začínají zadanou příponou. Například vzor hledání "*.xls" vrátí "book.xls" i "book.xlsx". K tomuto chování dochází pouze v případě, že se ve vzoru hledání používá hvězdička a zadaná přípona souboru má 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 rozhraní .NET Framework.

Soubory v adresáři Způsob hledání Vrátí se .NET 5 nebo novější. Vrátí rozhraní .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 nesmí končit dvěma tečkami ("..") nebo obsahovat dvě tečky ("..") za nimi DirectorySeparatorChar nebo AltDirectorySeparatorChar, ani nesmí obsahovat neplatné znaky. Pomocí metody se můžete dotazovat na neplatné znaky GetInvalidPathChars .

Pomocí parametru můžete zadat informace o relativní cestě path . Informace o relativní cestě jsou interpretovány jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody .

Metody EnumerateFiles a GetFiles se liší následujícím způsobem: Při použití EnumerateFilesmůžete spustit výčet kolekce názvů před vrácením celé kolekce. Pokud použijete GetFiles, musíte počkat, až se vrátí celé pole názvů, abyste měli přístup k matici. 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 v kolekci zahájí nový výčet.

Platí pro

EnumerateFiles(String, String, EnumerationOptions)

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á 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ý chcete vyhledat. Tento řetězec neodlišuje velká a malá 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 literálových cest 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ýčtovou kolekci úplných názvů (včetně cest) pro soubory v adresáři určeném a path , které odpovídají zadanému vzoru hledání a možnostem výčtu.

Výjimky

.NET Framework a .NET Core verze starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Pomocí metody se můžete dotazovat na neplatné znaky GetInvalidPathChars() .

-nebo-

searchPattern neobsahuje platný vzor.

path je null.

-nebo-

searchPattern je null.

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 kombinace překračuje maximální délku definovanou systémem.

Volající nemá požadované oprávnění.

Poznámky

searchPattern může být kombinací literálu a zástupných znaků, ale nepodporuje regulární výrazy. V systému jsou povoleny následující specifikátory zástupných searchPatternznaků.

Specifikátor zástupných znaků Shody
* (hvězdička) Na této pozici není žádný nebo více znaků.
? (otazník) Přesně jeden znak na této pozici.

Jiné znaky než zástupný znak jsou literální znaky. Například searchPattern řetězec "*t" vyhledá všechna jména path končící písmenem "t". Řetězec searchPattern "s*" vyhledá všechna jména path začínající písmenem "s".

Poznámka

Pouze rozhraní .NET Framework: Pokud použijete zástupný znak hvězdička v searchPattern a zadáte tříznakovou příponu souboru, například "*.txt", vrátí tato metoda také soubory s příponami, které začínají zadanou příponou. Například vzorec hledání "*.xls" vrátí "book.xls" i "book.xlsx". K tomuto chování dochází pouze v případě, že je ve vzoru hledání použita hvězdička a zadanou příponou 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 rozhraní .NET Framework.

Soubory v adresáři Způsob hledání Vrácení .NET 5+ Rozhraní .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 nesmí končit dvěma tečkami (..) nebo obsahovat dvě tečky (..) následované tečkami DirectorySeparatorChar nebo AltDirectorySeparatorChara nesmí obsahovat žádné neplatné znaky. Na neplatné znaky se můžete dotazovat pomocí metody .GetInvalidPathChars

Pomocí parametru můžete zadat relativní informace o cestě path . Informace o relativní cestě jsou interpretovány jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody .

Metody EnumerateFiles a GetFiles se liší následujícím způsobem: Pokud použijete EnumerateFiles, můžete začít s vytvářením výčtu kolekce názvů před vrácením celé kolekce. Při použití příkazu GetFilesmusíte počkat na vrácení celého pole názvů, abyste mohli získat přístup k poli. Proto, když pracujete 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 na kolekci spustí nový výčet.

Platí pro

EnumerateFiles(String)

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ý chcete vyhledat. Tento řetězec neodlišuje velká a malá písmena.

Návraty

Výčtovou kolekci celých jmen (včetně cest) pro soubory v adresáři určeném parametrem path.

Výjimky

.NET Framework a .NET Core verze starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Na neplatné znaky se můžete dotazovat pomocí metody .GetInvalidPathChars()

path je null.

path je neplatný, například odkaz na nenamapovanou jednotku.

path je název souboru.

Zadaná cesta, název souboru nebo kombinace překračují 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í už soubory v původním adresáři neexistují.

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

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;

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

Poznámky

Pomocí parametru můžete zadat relativní informace o cestě path . Informace o relativní cestě jsou interpretovány jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody .

Metody EnumerateFiles a GetFiles se liší následujícím způsobem: Pokud použijete EnumerateFiles, můžete začít s vytvářením výčtu kolekce názvů před vrácením celé kolekce. Při použití příkazu GetFilesmusíte počkat na vrácení celého pole názvů, abyste mohli získat přístup k poli. Proto, když pracujete 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 na kolekci spustí nový výčet.

Platí pro

EnumerateFiles(String, String)

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ý chcete vyhledat. Tento řetězec neodlišuje velká a malá písmena.

searchPattern
String

Hledaný řetězec, který se má shodovat s názvy souborů v path. Tento parametr může obsahovat kombinaci platné literálové cesty a zástupných znaků (* a ?), ale nepodporuje regulární výrazy.

Návraty

Výčetná kolekce úplných jmen (včetně cest) pro soubory v adresáři určeném a path které odpovídají zadanému vzoru hledání.

Výjimky

.NET Framework a .NET Core verze starší než 2.1: path je řetězec nulové délky, obsahuje pouze prázdné znaky nebo obsahuje neplatné znaky. Na neplatné znaky se můžete dotazovat pomocí metody .GetInvalidPathChars()

-nebo-

searchPattern neobsahuje platný vzor.

path je null.

-nebo-

searchPattern je null.

path je neplatný, například odkaz na nenamapovanou jednotku.

path je název souboru.

Zadaná cesta, název souboru nebo kombinace překračují 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í už soubory v původním adresáři neexistují.

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

Následující příklad vytvoří výčet souborů 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;

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

Poznámky

searchPattern může být kombinací literálů a zástupných znaků, ale nepodporuje regulární výrazy. V systému jsou povoleny následující specifikátory zástupných searchPatternznaků.

Specifikátor zástupných znaků Shody
* (hvězdička) Na této pozici není žádný nebo více znaků.
? (otazník) Přesně jeden znak na této pozici.

Jiné znaky než zástupný znak jsou literální znaky. Například searchPattern řetězec "*t" vyhledá všechna jména path končící písmenem "t". Řetězec searchPattern "s*" vyhledá všechna jména path začínající písmenem "s".

Poznámka

Pouze rozhraní .NET Framework: Pokud použijete zástupný znak hvězdička v searchPattern a zadáte tříznakovou příponu souboru, například "*.txt", vrátí tato metoda také soubory s příponami, které začínají zadanou příponou. Například vzorec hledání "*.xls" vrátí "book.xls" i "book.xlsx". K tomuto chování dochází pouze v případě, že je ve vzoru hledání použita hvězdička a zadanou příponou 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 rozhraní .NET Framework.

Soubory v adresáři Způsob hledání Vrácení .NET 5+ Rozhraní .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 nesmí končit dvěma tečkami ("..") nebo obsahovat dvě tečky ("..") za nimi DirectorySeparatorChar nebo AltDirectorySeparatorChar, ani nesmí obsahovat neplatné znaky. Pomocí metody se můžete dotazovat na neplatné znaky GetInvalidPathChars .

Pomocí parametru můžete zadat informace o relativní cestě path . Informace o relativní cestě jsou interpretovány jako relativní vzhledem k aktuálnímu pracovnímu adresáři, který můžete určit pomocí GetCurrentDirectory metody .

Metody EnumerateFiles a GetFiles se liší následujícím způsobem: Při použití EnumerateFilesmůžete spustit výčet kolekce názvů před vrácením celé kolekce; při použití GetFilesmusíte počkat, až se vrátí celé pole názvů, abyste měli přístup k matici. 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 v kolekci zahájí nový výčet.

Platí pro