Directory.EnumerateFiles Metoda

Definicja

Zwraca wyliczaną kolekcję pełnych nazw plików spełniających określone kryteria.

Przeciążenia

EnumerateFiles(String, String, SearchOption)

Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce i opcjonalnie wyszukuje podkatalogi.

EnumerateFiles(String, String, EnumerationOptions)

Zwraca wyliczenie kolekcji pełnych nazw plików pasujących do wzorca wyszukiwania i opcji wyliczenia w określonej ścieżce oraz opcjonalnie wyszukuje podkatalogi.

EnumerateFiles(String)

Zwraca wyliczalną kolekcję pełnych nazw plików w określonej ścieżce.

EnumerateFiles(String, String)

Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce.

EnumerateFiles(String, String, SearchOption)

Źródło:
Directory.cs
Źródło:
Directory.cs
Źródło:
Directory.cs

Zwraca wyliczalną kolekcję pełnych nazw plików pasujących do wzorca wyszukiwania w określonej ścieżce i opcjonalnie wyszukuje podkatalogi.

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

Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.

searchPattern
String

Ciąg wyszukiwania zgodny z nazwami plików w pliku path. Ten parametr może zawierać kombinację prawidłowych znaków literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.

searchOption
SearchOption

Jedna z wartości wyliczenia określająca, czy operacja wyszukiwania powinna zawierać tylko bieżący katalog, czy powinna zawierać wszystkie podkatalogi. Wartość domyślna to TopDirectoryOnly.

Zwraca

Wyliczenie kolekcji pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path i które są zgodne z określonym wzorcem wyszukiwania i opcją wyszukiwania.

Wyjątki

.NET Framework i .NET Core w wersjach starszych niż 2.1: path jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .

-lub-

searchPattern nie zawiera prawidłowego wzorca.

path to null.

-lub-

searchPattern to null.

searchOption jest nieprawidłową SearchOption wartością.

path jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.

path to nazwa pliku.

Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Przykłady

W poniższym przykładzie pokazano, jak pobrać wszystkie pliki tekstowe w katalogu i jego podkatalogach i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnych katalogach.

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

Poniższy przykład rekursywnie wylicza wszystkie pliki, które mają rozszerzenie .txt, odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "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

Uwagi

searchPattern może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w pliku searchPattern.

Specyfikator symboli wieloznacznych Jest zgodny z
* (gwiazdka) Zero lub więcej znaków w tej pozycji.
? (znak zapytania) Dokładnie jeden znak w tej pozycji.

Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern ciąg "*t" wyszukuje wszystkie nazwy path kończące się literą "t". Ciąg searchPattern "s*" wyszukuje wszystkie nazwy path na początku litery "s".

Uwaga

.NET Framework tylko: w przypadku używania symbolu wieloznakowego gwiazdki i searchPattern określenia rozszerzenia pliku trzyznaczne, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku ma dokładnie trzy znaki. Jeśli używasz znaku wieloznakowego znaku zapytania gdzieś w wzorcu wyszukiwania, ta metoda zwraca tylko pliki zgodne z określonym rozszerzeniem pliku dokładnie. W poniższej tabeli przedstawiono tę anomalię w .NET Framework.

Pliki w katalogu wzorzec Search Zwracany jest program .NET 5+ .NET Framework zwraca
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 ello.txt, hello.txt ello.txt, hello.txt

searchPattern nie może kończyć się dwoma kropkami ("..") lub zawierać dwa kropki (".)."), po DirectorySeparatorChar których następuje lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars metody .

Możesz określić informacje o ścieżce względnej za pomocą parametru path . Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .

Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia EnumerateFilesmetody można rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. Gdy używasz metody GetFiles, musisz poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.

Zwrócona kolekcja nie jest buforowana. Każde wywołanie elementu GetEnumerator w kolekcji rozpoczyna nową wyliczenie.

Dotyczy

EnumerateFiles(String, String, EnumerationOptions)

Źródło:
Directory.cs
Źródło:
Directory.cs
Źródło:
Directory.cs

Zwraca wyliczaną kolekcję pełnych nazw plików, które pasują do wzorca wyszukiwania i opcji wyliczania w określonej ścieżce, a opcjonalnie wyszukuje podkatalogi.

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

Ścieżka względna lub bezwzględna do katalogu do wyszukiwania. W tym ciągu nie jest rozróżniana wielkość liter.

searchPattern
String

Ciąg wyszukiwania zgodny z nazwami plików w pliku path. Ten parametr może zawierać kombinację prawidłowych znaków literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.

enumerationOptions
EnumerationOptions

Obiekt opisujący konfigurację wyszukiwania i wyliczenia do użycia.

Zwraca

Wyliczana kolekcja pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path program i pasujących do określonego wzorca wyszukiwania i opcji wyliczenia.

Wyjątki

.NET Framework i .NET Core w wersjach starszych niż 2.1: path jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Możesz wykonać zapytanie o nieprawidłowe znaki przy użyciu GetInvalidPathChars() metody .

-lub-

searchPattern nie zawiera prawidłowego wzorca.

path to null.

-lub-

searchPattern to null.

searchOption jest nieprawidłową SearchOption wartością.

path jest nieprawidłowy, na przykład odwoływania się do niezamapowanego dysku.

path to nazwa pliku.

Określona ścieżka, nazwa pliku lub połączenie przekraczają maksymalną długość zdefiniowaną przez system.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Uwagi

searchPattern może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w pliku searchPattern.

Specyfikator symboli wieloznacznych Jest zgodny z
* (gwiazdka) Zero lub więcej znaków w tej pozycji.
? (znak zapytania) Dokładnie jeden znak w tej pozycji.

Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern ciąg "*t" wyszukuje wszystkie nazwy path kończące się literą "t". Ciąg searchPattern "s*" wyszukuje wszystkie nazwy, path zaczynając od litery "s".

Uwaga

tylko .NET Framework: w przypadku używania znaku wieloznakowego gwiazdki w searchPattern pliku i określenia rozszerzenia pliku z trzema znakami, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku to dokładnie trzy znaki. Jeśli używasz symbolu wieloznakowego znaku zapytania gdzieś we wzorcu wyszukiwania, ta metoda zwraca tylko pliki, które dokładnie pasują do określonego rozszerzenia pliku. Poniższa tabela przedstawia tę anomalię w .NET Framework.

Pliki w katalogu wzorzec Search Zwracany jest program .NET 5+ .NET Framework zwraca
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 ello.txt, hello.txt ello.txt, hello.txt

searchPattern program nie może kończyć się dwoma kropkami ("..") ani zawierać dwóch kropek (".."), po których następuje DirectorySeparatorChar znak lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Zapytania dotyczące nieprawidłowych znaków można wykonać przy użyciu GetInvalidPathChars metody .

Możesz określić informacje o ścieżce względnej za pomocą parametru path . Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .

Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia metody EnumerateFilesmożna rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. W przypadku używania programu GetFilesnależy poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.

Zwrócona kolekcja nie jest buforowana. Każde wywołanie metody GetEnumerator w kolekcji rozpoczyna nowe wyliczenie.

Dotyczy

EnumerateFiles(String)

Źródło:
Directory.cs
Źródło:
Directory.cs
Źródło:
Directory.cs

Zwraca wyliczaną kolekcję pełnych nazw plików w określonej ścieżce.

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

Ścieżka względna lub bezwzględna do katalogu do wyszukania. W tym ciągu nie jest rozróżniana wielkość liter.

Zwraca

Wyliczalna kolekcja pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path.

Wyjątki

.NET Framework i .NET Core w wersjach starszych niż 2.1: path jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Zapytania dotyczące nieprawidłowych znaków można wykonać przy użyciu GetInvalidPathChars() metody .

path to null.

path jest nieprawidłowy, na przykład odwołując się do niezamapowanego dysku.

path to nazwa pliku.

Określona ścieżka, nazwa pliku lub łączna długość przekracza zdefiniowaną przez system maksymalną długość.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Przykłady

W poniższym przykładzie pokazano, jak pobrać wszystkie pliki w katalogu i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnym katalogu.

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

Poniższy przykład wylicza pliki w określonym katalogu, odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "Europa".

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

Uwagi

Możesz określić informacje o ścieżce względnej za pomocą parametru path . Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .

Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia metody EnumerateFilesmożna rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. W przypadku używania programu GetFilesnależy poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.

Zwrócona kolekcja nie jest buforowana; każde wywołanie GetEnumerator obiektu w kolekcji spowoduje uruchomienie nowego wyliczenia.

Dotyczy

EnumerateFiles(String, String)

Źródło:
Directory.cs
Źródło:
Directory.cs
Źródło:
Directory.cs

Zwraca wyliczaną kolekcję pełnych nazw plików, które pasują do wzorca wyszukiwania w określonej ścieżce.

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

Ścieżka względna lub bezwzględna do katalogu do wyszukania. W tym ciągu nie jest rozróżniana wielkość liter.

searchPattern
String

Ciąg wyszukiwania zgodny z nazwami plików w pliku path. Ten parametr może zawierać kombinację prawidłowych znaków ścieżki literału i symboli wieloznacznych (* i ?), ale nie obsługuje wyrażeń regularnych.

Zwraca

Wyliczalna kolekcja pełnych nazw (w tym ścieżek) dla plików w katalogu określonym przez path i które są zgodne z określonym wzorcem wyszukiwania.

Wyjątki

.NET Framework i .NET Core w wersjach starszych niż 2.1: path jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki. Zapytania dotyczące nieprawidłowych znaków można wykonać przy użyciu GetInvalidPathChars() metody .

-lub-

searchPattern nie zawiera prawidłowego wzorca.

path to null.

-lub-

searchPattern to null.

path jest nieprawidłowy, na przykład odwołując się do niezamapowanego dysku.

path to nazwa pliku.

Określona ścieżka, nazwa pliku lub łączna długość przekracza zdefiniowaną przez system maksymalną długość.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Obiekt wywołujący nie posiada wymaganych uprawnień.

Przykłady

W poniższym przykładzie pokazano, jak pobrać wszystkie pliki tekstowe w katalogu i przenieść je do nowego katalogu. Po przeniesieniu plików nie istnieją już w oryginalnym katalogu.

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

Poniższy przykład wylicza pliki w określonym katalogu, które mają rozszerzenie ".txt", odczytuje każdy wiersz pliku i wyświetla wiersz, jeśli zawiera ciąg "Europa".

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

Uwagi

searchPattern może być kombinacją literałów i symboli wieloznacznych, ale nie obsługuje wyrażeń regularnych. Następujące specyfikatory symboli wieloznacznych są dozwolone w programie searchPattern.

Specyfikator symboli wieloznacznych Jest zgodny z
* (gwiazdka) Zero lub więcej znaków w tej pozycji.
? (znak zapytania) Dokładnie jeden znak w tej pozycji.

Znaki inne niż symbol wieloznaczny to znaki literału. Na przykład searchPattern ciąg "*t" wyszukuje wszystkie nazwy path kończące się literą "t". Ciąg searchPattern "s*" wyszukuje wszystkie nazwy, path zaczynając od litery "s".

Uwaga

tylko .NET Framework: w przypadku używania znaku wieloznakowego gwiazdki w searchPattern pliku i określenia rozszerzenia pliku z trzema znakami, na przykład "*.txt", ta metoda zwraca również pliki z rozszerzeniami rozpoczynającymi się od określonego rozszerzenia. Na przykład wzorzec wyszukiwania "*.xls" zwraca zarówno "book.xls" jak i "book.xlsx". To zachowanie występuje tylko wtedy, gdy gwiazdka jest używana we wzorcu wyszukiwania, a podane rozszerzenie pliku to dokładnie trzy znaki. Jeśli używasz symbolu wieloznakowego znaku zapytania gdzieś we wzorcu wyszukiwania, ta metoda zwraca tylko pliki, które dokładnie pasują do określonego rozszerzenia pliku. Poniższa tabela przedstawia tę anomalię w .NET Framework.

Pliki w katalogu wzorzec Search Zwracany jest program .NET 5+ .NET Framework zwraca
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 ello.txt, hello.txt ello.txt, hello.txt

searchPattern program nie może kończyć się dwoma kropkami ("..") ani zawierać dwóch kropek (".."), po których następuje DirectorySeparatorChar znak lub AltDirectorySeparatorChar, ani nie może zawierać żadnych nieprawidłowych znaków. Zapytania dotyczące nieprawidłowych znaków można wykonać przy użyciu GetInvalidPathChars metody .

Możesz określić informacje o ścieżce względnej za pomocą parametru path . Informacje o ścieżce względnej są interpretowane jako względem bieżącego katalogu roboczego, który można określić przy użyciu GetCurrentDirectory metody .

Metody EnumerateFiles i GetFiles różnią się w następujący sposób: w przypadku użycia metody EnumerateFilesmożna rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji. W przypadku użycia metody GetFilesnależy poczekać na zwrócenie całej tablicy nazw, zanim będzie można uzyskać dostęp do tablicy. W związku z tym podczas pracy z wieloma plikami i katalogami EnumerateFiles może być wydajniejszy.

Zwrócona kolekcja nie jest buforowana. Każde wywołanie metody GetEnumerator w kolekcji rozpoczyna nowe wyliczenie.

Dotyczy