Directory.EnumerateFiles Metod

Definition

Returnerar en uppräkningsbar samling med fullständiga filnamn som uppfyller angivna villkor.

Överlagringar

Name Description
EnumerateFiles(String, String, SearchOption)

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster i en angiven sökväg och söker eventuellt i underkataloger.

EnumerateFiles(String, String, EnumerationOptions)

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster och uppräkningsalternativ i en angiven sökväg och söker eventuellt efter underkataloger.

EnumerateFiles(String)

Returnerar en uppräkningsbar samling med fullständiga filnamn i en angiven sökväg.

EnumerateFiles(String, String)

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster i en angiven sökväg.

EnumerateFiles(String, String, SearchOption)

Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster i en angiven sökväg och söker eventuellt i underkataloger.

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)

Parametrar

path
String

Den relativa eller absoluta sökvägen till katalogen som ska sökas. Den här strängen är inte skiftlägeskänslig.

searchPattern
String

Söksträngen som ska matchas mot namnen på filerna i path. Den här parametern kan innehålla en kombination av giltiga teckensökväg och jokertecken (* och ?), men den stöder inte reguljära uttryck.

searchOption
SearchOption

Ett av uppräkningsvärdena som anger om sökåtgärden endast ska innehålla den aktuella katalogen eller ska innehålla alla underkataloger. Standardvärdet är TopDirectoryOnly.

Returer

En uppräkningsbar samling med fullständiga namn (inklusive sökvägar) för filerna i katalogen som anges av path och som matchar det angivna sökmönstret och sökalternativet.

Undantag

.NET Framework- och .NET Core-versioner som är äldre än 2.1: path är en sträng med noll längd, innehåller endast tomt utrymme eller innehåller ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars() av metoden .

-eller-

searchPattern innehåller inget giltigt mönster.

path är null.

-eller-

searchPattern är null.

searchOption är inte ett giltigt SearchOption värde.

path är ogiltigt, till exempel refererar till en ommappad enhet.

path är ett filnamn.

Den angivna sökvägen, filnamnet eller kombinerade överskrider den systemdefinierade maximala längden.

Anroparen har inte den behörighet som krävs.

Anroparen har inte den behörighet som krävs.

Exempel

I följande exempel visas hur du hämtar alla textfiler i en katalog och dess underkataloger och flyttar dem till en ny katalog. När filerna har flyttats finns de inte längre i de ursprungliga katalogerna.

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

Följande exempel räknar rekursivt upp alla filer som har tillägget .txt, läser varje rad i filen och visar raden om den innehåller strängen "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

Kommentarer

searchPattern kan vara en kombination av literaltecken och jokertecken, men det stöder inte reguljära uttryck. Följande jokerteckensspecificerare tillåts i searchPattern.

Jokerteckensspecificerare Matcher
* (asterisk) Noll eller fler tecken i den positionen.
? (frågetecken) Exakt ett tecken i den positionen.

Andra tecken än jokertecknet är literaltecken. Strängen searchPattern "*t" söker till exempel efter alla namn som path slutar med bokstaven "t". Strängen searchPattern "s*" söker efter alla namn från path och med bokstaven "s".

Note

.NET Framework only: När du använder jokertecknet asterisk i searchPattern och du anger ett filnamnstillägg med tre tecken, till exempel "*.txt", returnerar den här metoden även filer med tillägg som begin med det angivna tillägget. Sökmönstret "*.xls" returnerar till exempel både "book.xls" och "book.xlsx". Det här beteendet inträffar bara om en asterisk används i sökmönstret och filnamnstillägget är exakt tre tecken. Om du använder jokertecknet för frågetecknet någonstans i sökmönstret returnerar den här metoden endast filer som matchar det angivna filnamnstillägget exakt. Följande tabell visar den här avvikelsen i .NET Framework.

Filer i katalogen Sökmönster .NET 5+ returer .NET Framework returnerar
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 kan inte sluta i två perioder ("..") eller innehålla två punkter ("..") följt av DirectorySeparatorChar eller AltDirectorySeparatorChar, och kan inte heller innehålla ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars av metoden .

Du kan ange relativ sökvägsinformation med parametern path . Relativ sökvägsinformation tolkas som relativ till den aktuella arbetskatalogen, vilket du kan avgöra med hjälp GetCurrentDirectory av metoden.

Metoderna EnumerateFiles och GetFiles skiljer sig åt på följande sätt: När du använder EnumerateFileskan du börja räkna upp namnsamlingen innan hela samlingen returneras. När du använder GetFilesmåste du vänta tills hela matrisen med namn returneras innan du kan komma åt matrisen. Därför kan det vara mer effektivt när du arbetar med många filer och kataloger EnumerateFiles .

Den returnerade samlingen cachelagras inte. Varje anrop till GetEnumerator i samlingen startar en ny uppräkning.

Gäller för

EnumerateFiles(String, String, EnumerationOptions)

Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster och uppräkningsalternativ i en angiven sökväg och söker eventuellt efter underkataloger.

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)

Parametrar

path
String

Den relativa eller absoluta sökvägen till katalogen som ska sökas. Den här strängen är inte skiftlägeskänslig.

searchPattern
String

Söksträngen som ska matchas mot namnen på filerna i path. Den här parametern kan innehålla en kombination av giltiga teckensökväg och jokertecken (* och ?), men den stöder inte reguljära uttryck.

enumerationOptions
EnumerationOptions

Ett objekt som beskriver den sök- och uppräkningskonfiguration som ska användas.

Returer

En uppräkningsbar samling med fullständiga namn (inklusive sökvägar) för filerna i katalogen som anges av path och som matchar det angivna sökmönstret och uppräkningsalternativen.

Undantag

.NET Framework- och .NET Core-versioner som är äldre än 2.1: path är en sträng med noll längd, innehåller endast tomt utrymme eller innehåller ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars() av metoden .

-eller-

searchPattern innehåller inget giltigt mönster.

path är null.

-eller-

searchPattern är null.

path är ogiltigt, till exempel refererar till en ommappad enhet.

path är ett filnamn.

Den angivna sökvägen, filnamnet eller kombinerade överskrider den systemdefinierade maximala längden.

Anroparen har inte den behörighet som krävs.

Exempel

I följande exempel visas hur du hämtar alla textfiler i en katalog och dess underkataloger och flyttar dem till en ny katalog. När filerna har flyttats finns de inte längre i de ursprungliga katalogerna.

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

Följande exempel räknar rekursivt upp alla filer med .txt tillägget och ignorerar otillgängliga kataloger och filer. Den läser varje rad i filen och visar raden om den innehåller strängen "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

Kommentarer

searchPattern kan vara en kombination av literaltecken och jokertecken, men det stöder inte reguljära uttryck. Följande jokerteckensspecificerare tillåts i searchPattern.

Jokerteckensspecificerare Matcher
* (asterisk) Noll eller fler tecken i den positionen.
? (frågetecken) Exakt ett tecken i den positionen.

Andra tecken än jokertecknet är literaltecken. Strängen searchPattern "*t" söker till exempel efter alla namn som path slutar med bokstaven "t". Strängen searchPattern "s*" söker efter alla namn från path och med bokstaven "s".

Note

.NET Framework only: När du använder jokertecknet asterisk i searchPattern och du anger ett filnamnstillägg med tre tecken, till exempel "*.txt", returnerar den här metoden även filer med tillägg som begin med det angivna tillägget. Sökmönstret "*.xls" returnerar till exempel både "book.xls" och "book.xlsx". Det här beteendet inträffar bara om en asterisk används i sökmönstret och filnamnstillägget är exakt tre tecken. Om du använder jokertecknet för frågetecknet någonstans i sökmönstret returnerar den här metoden endast filer som matchar det angivna filnamnstillägget exakt. Följande tabell visar den här avvikelsen i .NET Framework.

Filer i katalogen Sökmönster .NET 5+ returer .NET Framework returnerar
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 kan inte sluta i två perioder ("..") eller innehålla två punkter ("..") följt av DirectorySeparatorChar eller AltDirectorySeparatorChar, och kan inte heller innehålla ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars av metoden .

Du kan ange relativ sökvägsinformation med parametern path . Relativ sökvägsinformation tolkas som relativ till den aktuella arbetskatalogen, vilket du kan avgöra med hjälp GetCurrentDirectory av metoden.

Metoderna EnumerateFiles och GetFiles skiljer sig åt på följande sätt: När du använder EnumerateFileskan du börja räkna upp namnsamlingen innan hela samlingen returneras. När du använder GetFilesmåste du vänta tills hela matrisen med namn returneras innan du kan komma åt matrisen. Därför kan det vara mer effektivt när du arbetar med många filer och kataloger EnumerateFiles .

Den returnerade samlingen cachelagras inte. Varje anrop till GetEnumerator i samlingen startar en ny uppräkning.

Gäller för

EnumerateFiles(String)

Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs

Returnerar en uppräkningsbar samling med fullständiga filnamn i en angiven sökväg.

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)

Parametrar

path
String

Den relativa eller absoluta sökvägen till katalogen som ska sökas. Den här strängen är inte skiftlägeskänslig.

Returer

En uppräkningsbar samling med fullständiga namn (inklusive sökvägar) för filerna i katalogen som anges av path.

Undantag

.NET Framework- och .NET Core-versioner som är äldre än 2.1: path är en sträng med noll längd, innehåller endast tomt utrymme eller innehåller ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars() av metoden .

path är null.

path är ogiltigt, till exempel refererar till en ommappad enhet.

path är ett filnamn.

Den angivna sökvägen, filnamnet eller kombinerade överskrider den systemdefinierade maximala längden.

Anroparen har inte den behörighet som krävs.

Anroparen har inte den behörighet som krävs.

Exempel

I följande exempel visas hur du hämtar alla filer i en katalog och flyttar dem till en ny katalog. När filerna har flyttats finns de inte längre i den ursprungliga katalogen.

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

I följande exempel räknas filerna upp i den angivna katalogen, varje rad i filen läses och raden visas om den innehåller strängen "Europa".

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

Kommentarer

Du kan ange relativ sökvägsinformation med parametern path . Relativ sökvägsinformation tolkas som relativ till den aktuella arbetskatalogen, vilket du kan avgöra med hjälp GetCurrentDirectory av metoden.

Metoderna EnumerateFiles och GetFiles skiljer sig åt på följande sätt: När du använder EnumerateFileskan du börja räkna upp namnsamlingen innan hela samlingen returneras. När du använder GetFilesmåste du vänta tills hela matrisen med namn returneras innan du kan komma åt matrisen. Därför kan det vara mer effektivt när du arbetar med många filer och kataloger EnumerateFiles .

Den returnerade samlingen cachelagras inte. varje anrop till GetEnumerator i samlingen startar en ny uppräkning.

Gäller för

EnumerateFiles(String, String)

Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs
Källa:
Directory.cs

Returnerar en uppräkningsbar samling med fullständiga filnamn som matchar ett sökmönster i en angiven sökväg.

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)

Parametrar

path
String

Den relativa eller absoluta sökvägen till katalogen som ska sökas. Den här strängen är inte skiftlägeskänslig.

searchPattern
String

Söksträngen som ska matchas mot namnen på filerna i path. Den här parametern kan innehålla en kombination av giltiga teckensökväg och jokertecken (* och ?), men den stöder inte reguljära uttryck.

Returer

En uppräkningsbar samling med fullständiga namn (inklusive sökvägar) för filerna i katalogen som anges av path och som matchar det angivna sökmönstret.

Undantag

.NET Framework- och .NET Core-versioner som är äldre än 2.1: path är en sträng med noll längd, innehåller endast tomt utrymme eller innehåller ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars() av metoden .

-eller-

searchPattern innehåller inget giltigt mönster.

path är null.

-eller-

searchPattern är null.

path är ogiltigt, till exempel refererar till en ommappad enhet.

path är ett filnamn.

Den angivna sökvägen, filnamnet eller kombinerade överskrider den systemdefinierade maximala längden.

Anroparen har inte den behörighet som krävs.

Anroparen har inte den behörighet som krävs.

Exempel

I följande exempel visas hur du hämtar alla textfiler i en katalog och flyttar dem till en ny katalog. När filerna har flyttats finns de inte längre i den ursprungliga katalogen.

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

I följande exempel räknas filerna upp i den angivna katalogen som har tillägget ".txt", läser varje rad i filen och visar raden om den innehåller strängen "Europa".

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

Kommentarer

searchPattern kan vara en kombination av literaltecken och jokertecken, men det stöder inte reguljära uttryck. Följande jokerteckensspecificerare tillåts i searchPattern.

Jokerteckensspecificerare Matcher
* (asterisk) Noll eller fler tecken i den positionen.
? (frågetecken) Exakt ett tecken i den positionen.

Andra tecken än jokertecknet är literaltecken. Strängen searchPattern "*t" söker till exempel efter alla namn som path slutar med bokstaven "t". Strängen searchPattern "s*" söker efter alla namn från path och med bokstaven "s".

Note

.NET Framework only: När du använder jokertecknet asterisk i searchPattern och du anger ett filnamnstillägg med tre tecken, till exempel "*.txt", returnerar den här metoden även filer med tillägg som begin med det angivna tillägget. Sökmönstret "*.xls" returnerar till exempel både "book.xls" och "book.xlsx". Det här beteendet inträffar bara om en asterisk används i sökmönstret och filnamnstillägget är exakt tre tecken. Om du använder jokertecknet för frågetecknet någonstans i sökmönstret returnerar den här metoden endast filer som matchar det angivna filnamnstillägget exakt. Följande tabell visar den här avvikelsen i .NET Framework.

Filer i katalogen Sökmönster .NET 5+ returer .NET Framework returnerar
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 kan inte sluta i två perioder ("..") eller innehålla två punkter ("..") följt av DirectorySeparatorChar eller AltDirectorySeparatorChar, och kan inte heller innehålla ogiltiga tecken. Du kan fråga efter ogiltiga tecken med hjälp GetInvalidPathChars av metoden .

Du kan ange relativ sökvägsinformation med parametern path . Relativ sökvägsinformation tolkas som relativ till den aktuella arbetskatalogen, vilket du kan avgöra med hjälp GetCurrentDirectory av metoden.

Metoderna EnumerateFiles och GetFiles skiljer sig åt på följande sätt: När du använder EnumerateFileskan du börja räkna upp namnsamlingen innan hela samlingen returneras. När du använder GetFilesmåste du vänta tills hela matrisen med namn returneras innan du kan komma åt matrisen. Därför kan det vara mer effektivt när du arbetar med många filer och kataloger EnumerateFiles .

Den returnerade samlingen cachelagras inte. Varje anrop till GetEnumerator i samlingen startar en ny uppräkning.

Gäller för