Directory.EnumerateFiles Metode

Definisi

Mengembalikan kumpulan nama file lengkap yang dapat dihitung yang memenuhi kriteria yang ditentukan.

Overload

Nama Deskripsi
EnumerateFiles(String, String, SearchOption)

Mengembalikan kumpulan nama file lengkap yang dapat dihitung yang cocok dengan pola pencarian di jalur tertentu, dan secara opsional mencari subdirektori.

EnumerateFiles(String, String, EnumerationOptions)

Mengembalikan kumpulan nama file lengkap yang dapat dihitung yang cocok dengan pola pencarian dan opsi enumerasi dalam jalur tertentu, dan secara opsional mencari subdirektori.

EnumerateFiles(String)

Mengembalikan kumpulan nama file lengkap yang dapat dihitung dalam jalur tertentu.

EnumerateFiles(String, String)

Mengembalikan kumpulan nama file lengkap yang dapat dijumlahkan yang cocok dengan pola pencarian dalam jalur tertentu.

EnumerateFiles(String, String, SearchOption)

Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs

Mengembalikan kumpulan nama file lengkap yang dapat dihitung yang cocok dengan pola pencarian di jalur tertentu, dan secara opsional mencari subdirektori.

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)

Parameter

path
String

Jalur relatif atau absolut ke direktori untuk dicari. String ini tidak peka huruf besar/kecil.

searchPattern
String

String pencarian yang cocok dengan nama file di path. Parameter ini dapat berisi kombinasi jalur literal yang valid dan karakter kartubebas (* dan ?), tetapi tidak mendukung ekspresi reguler.

searchOption
SearchOption

Salah satu nilai enumerasi yang menentukan apakah operasi pencarian hanya boleh menyertakan direktori saat ini atau harus menyertakan semua subdirektori. Nilai defaultnya adalah TopDirectoryOnly.

Mengembalikan

Kumpulan nama lengkap yang dapat dijumlahkan (termasuk jalur) untuk file dalam direktori yang ditentukan oleh dan yang cocok dengan path pola pencarian dan opsi pencarian yang ditentukan.

Pengecualian

.NET Framework dan versi .NET Core yang lebih lama dari 2.1: path adalah string panjang nol, hanya berisi spasi kosong, atau berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars().

-atau-

searchPattern tidak berisi pola yang valid.

path adalah null.

-atau-

searchPattern adalah null.

searchOption bukan nilai yang valid SearchOption .

path tidak valid, seperti mengacu pada drive yang tidak dipetakan.

path adalah nama file.

Jalur, nama file, atau gabungan yang ditentukan melebihi panjang maksimum yang ditentukan sistem.

Pemanggil tidak memiliki izin yang diperlukan.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh berikut menunjukkan cara mengambil semua file teks dalam direktori dan subdirektorinya, dan memindahkannya ke direktori baru. Setelah file dipindahkan, file tidak lagi ada di direktori asli.

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

Contoh berikut secara rekursif menghitung semua file yang memiliki ekstensi .txt, membaca setiap baris file, dan menampilkan baris jika berisi string "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

Keterangan

searchPattern dapat berupa kombinasi karakter literal dan kartubebas, tetapi tidak mendukung ekspresi reguler. Penentu kartubebas berikut diizinkan dalam searchPattern.

Penentu kartubebas Pencocokan
* (tanda bintang) Nol atau lebih karakter dalam posisi tersebut.
? (Tanda tanya) Tepat satu karakter dalam posisi itu.

Karakter selain kartubebas adalah karakter harfiah. Misalnya, searchPattern untai (karakter) "*t" mencari semua nama yang path diakhir dengan huruf "t". String searchPattern "s*" mencari semua nama di path awal dengan huruf "s".

Note

.NET Framework only: Saat Anda menggunakan karakter wildcard tanda bintang di searchPattern dan Anda menentukan ekstensi file tiga karakter, misalnya, "*.txt", metode ini juga mengembalikan file dengan ekstensi yang begin dengan ekstensi yang ditentukan. Misalnya, pola pencarian "*.xls" mengembalikan "book.xls" dan "book.xlsx". Perilaku ini hanya terjadi jika tanda bintang digunakan dalam pola pencarian dan ekstensi file yang disediakan tepat tiga karakter. Jika Anda menggunakan karakter kartubebas tanda tanya di suatu tempat dalam pola pencarian, metode ini hanya mengembalikan file yang sama persis dengan ekstensi file yang ditentukan. Tabel berikut menggambarkan anomali ini dalam .NET Framework.

File dalam direktori Pola pencarian .NET 5+ mengembalikan .NET Framework mengembalikan
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 tidak dapat berakhir dalam dua titik ("..") atau berisi dua titik ("..") diikuti oleh DirectorySeparatorChar atau AltDirectorySeparatorChar, juga tidak boleh berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars.

Anda dapat menentukan informasi jalur relatif dengan path parameter . Informasi jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini, yang dapat Anda tentukan dengan menggunakan metode .GetCurrentDirectory

Metode EnumerateFiles dan GetFiles berbeda sebagai berikut: Ketika Anda menggunakan EnumerateFiles, Anda dapat mulai menghitung koleksi nama sebelum seluruh koleksi dikembalikan. Saat Anda menggunakan GetFiles, Anda harus menunggu seluruh array nama dikembalikan sebelum Anda dapat mengakses array. Oleh karena itu, ketika Anda bekerja dengan banyak file dan direktori, EnumerateFiles bisa lebih efisien.

Koleksi yang dikembalikan tidak di-cache. Setiap panggilan ke GetEnumerator pada koleksi memulai enumerasi baru.

Berlaku untuk

EnumerateFiles(String, String, EnumerationOptions)

Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs

Mengembalikan kumpulan nama file lengkap yang dapat dihitung yang cocok dengan pola pencarian dan opsi enumerasi dalam jalur tertentu, dan secara opsional mencari subdirektori.

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)

Parameter

path
String

Jalur relatif atau absolut ke direktori untuk dicari. String ini tidak peka huruf besar/kecil.

searchPattern
String

String pencarian yang cocok dengan nama file di path. Parameter ini dapat berisi kombinasi jalur literal yang valid dan karakter kartubebas (* dan ?), tetapi tidak mendukung ekspresi reguler.

enumerationOptions
EnumerationOptions

Objek yang menjelaskan konfigurasi pencarian dan enumerasi yang akan digunakan.

Mengembalikan

Kumpulan nama lengkap yang dapat dihitung (termasuk jalur) untuk file dalam direktori yang ditentukan oleh dan yang cocok dengan path pola pencarian dan opsi enumerasi yang ditentukan.

Pengecualian

.NET Framework dan versi .NET Core yang lebih lama dari 2.1: path adalah string panjang nol, hanya berisi spasi kosong, atau berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars().

-atau-

searchPattern tidak berisi pola yang valid.

path adalah null.

-atau-

searchPattern adalah null.

path tidak valid, seperti mengacu pada drive yang tidak dipetakan.

path adalah nama file.

Jalur, nama file, atau gabungan yang ditentukan melebihi panjang maksimum yang ditentukan sistem.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh berikut menunjukkan cara mengambil semua file teks dalam direktori dan subdirektorinya dan memindahkannya ke direktori baru. Setelah file dipindahkan, file tidak lagi ada di direktori asli.

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

Contoh berikut secara rekursif menghitung semua file dengan .txt ekstensi, mengabaikan direktori dan file yang tidak dapat diakses. Ini membaca setiap baris file dan menampilkan baris jika berisi string "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

Keterangan

searchPattern dapat berupa kombinasi karakter literal dan kartubebas, tetapi tidak mendukung ekspresi reguler. Penentu kartubebas berikut diizinkan dalam searchPattern.

Penentu kartubebas Pencocokan
* (tanda bintang) Nol atau lebih karakter dalam posisi tersebut.
? (Tanda tanya) Tepat satu karakter dalam posisi itu.

Karakter selain kartubebas adalah karakter harfiah. Misalnya, searchPattern untai (karakter) "*t" mencari semua nama yang path diakhir dengan huruf "t". String searchPattern "s*" mencari semua nama di path awal dengan huruf "s".

Note

.NET Framework only: Saat Anda menggunakan karakter wildcard tanda bintang di searchPattern dan Anda menentukan ekstensi file tiga karakter, misalnya, "*.txt", metode ini juga mengembalikan file dengan ekstensi yang begin dengan ekstensi yang ditentukan. Misalnya, pola pencarian "*.xls" mengembalikan "book.xls" dan "book.xlsx". Perilaku ini hanya terjadi jika tanda bintang digunakan dalam pola pencarian dan ekstensi file yang disediakan tepat tiga karakter. Jika Anda menggunakan karakter kartubebas tanda tanya di suatu tempat dalam pola pencarian, metode ini hanya mengembalikan file yang sama persis dengan ekstensi file yang ditentukan. Tabel berikut menggambarkan anomali ini dalam .NET Framework.

File dalam direktori Pola pencarian .NET 5+ mengembalikan .NET Framework mengembalikan
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 tidak dapat berakhir dalam dua titik ("..") atau berisi dua titik ("..") diikuti oleh DirectorySeparatorChar atau AltDirectorySeparatorChar, juga tidak boleh berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars.

Anda dapat menentukan informasi jalur relatif dengan path parameter . Informasi jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini, yang dapat Anda tentukan dengan menggunakan metode .GetCurrentDirectory

Metode EnumerateFiles dan GetFiles berbeda sebagai berikut: Ketika Anda menggunakan EnumerateFiles, Anda dapat mulai menghitung koleksi nama sebelum seluruh koleksi dikembalikan. Saat Anda menggunakan GetFiles, Anda harus menunggu seluruh array nama dikembalikan sebelum Anda dapat mengakses array. Oleh karena itu, ketika Anda bekerja dengan banyak file dan direktori, EnumerateFiles bisa lebih efisien.

Koleksi yang dikembalikan tidak di-cache. Setiap panggilan ke GetEnumerator pada koleksi memulai enumerasi baru.

Berlaku untuk

EnumerateFiles(String)

Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs

Mengembalikan kumpulan nama file lengkap yang dapat dihitung dalam jalur tertentu.

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)

Parameter

path
String

Jalur relatif atau absolut ke direktori untuk dicari. String ini tidak peka huruf besar/kecil.

Mengembalikan

Kumpulan nama lengkap yang dapat dijumlahkan (termasuk jalur) untuk file dalam direktori yang ditentukan oleh path.

Pengecualian

.NET Framework dan versi .NET Core yang lebih lama dari 2.1: path adalah string panjang nol, hanya berisi spasi kosong, atau berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars().

path adalah null.

path tidak valid, seperti mengacu pada drive yang tidak dipetakan.

path adalah nama file.

Jalur, nama file, atau gabungan yang ditentukan melebihi panjang maksimum yang ditentukan sistem.

Pemanggil tidak memiliki izin yang diperlukan.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh berikut menunjukkan cara mengambil semua file dalam direktori dan memindahkannya ke direktori baru. Setelah file dipindahkan, file tidak lagi ada di direktori asli.

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

Contoh berikut menghitung file dalam direktori yang ditentukan, membaca setiap baris file, dan menampilkan baris jika berisi string "Eropa".

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

Keterangan

Anda dapat menentukan informasi jalur relatif dengan path parameter . Informasi jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini, yang dapat Anda tentukan dengan menggunakan metode .GetCurrentDirectory

Metode EnumerateFiles dan GetFiles berbeda sebagai berikut: Ketika Anda menggunakan EnumerateFiles, Anda dapat mulai menghitung koleksi nama sebelum seluruh koleksi dikembalikan. Saat Anda menggunakan GetFiles, Anda harus menunggu seluruh array nama dikembalikan sebelum Anda dapat mengakses array. Oleh karena itu, ketika Anda bekerja dengan banyak file dan direktori, EnumerateFiles bisa lebih efisien.

Koleksi yang dikembalikan tidak di-cache; setiap panggilan ke GetEnumerator pada koleksi akan memulai enumerasi baru.

Berlaku untuk

EnumerateFiles(String, String)

Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs
Sumber:
Directory.cs

Mengembalikan kumpulan nama file lengkap yang dapat dijumlahkan yang cocok dengan pola pencarian dalam jalur tertentu.

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)

Parameter

path
String

Jalur relatif atau absolut ke direktori untuk dicari. String ini tidak peka huruf besar/kecil.

searchPattern
String

String pencarian yang cocok dengan nama file di path. Parameter ini dapat berisi kombinasi jalur literal yang valid dan karakter kartubebas (* dan ?), tetapi tidak mendukung ekspresi reguler.

Mengembalikan

Kumpulan nama lengkap yang dapat dijumlahkan (termasuk jalur) untuk file dalam direktori yang ditentukan oleh dan yang cocok dengan path pola pencarian yang ditentukan.

Pengecualian

.NET Framework dan versi .NET Core yang lebih lama dari 2.1: path adalah string panjang nol, hanya berisi spasi kosong, atau berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars().

-atau-

searchPattern tidak berisi pola yang valid.

path adalah null.

-atau-

searchPattern adalah null.

path tidak valid, seperti mengacu pada drive yang tidak dipetakan.

path adalah nama file.

Jalur, nama file, atau gabungan yang ditentukan melebihi panjang maksimum yang ditentukan sistem.

Pemanggil tidak memiliki izin yang diperlukan.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh berikut menunjukkan cara mengambil semua file teks dalam direktori dan memindahkannya ke direktori baru. Setelah file dipindahkan, file tidak lagi ada di direktori asli.

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

Contoh berikut menghitung file dalam direktori yang ditentukan yang memiliki ekstensi ".txt", membaca setiap baris file, dan menampilkan baris jika berisi string "Eropa".

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

Keterangan

searchPattern dapat berupa kombinasi karakter literal dan kartubebas, tetapi tidak mendukung ekspresi reguler. Penentu kartubebas berikut diizinkan dalam searchPattern.

Penentu kartubebas Pencocokan
* (tanda bintang) Nol atau lebih karakter dalam posisi tersebut.
? (Tanda tanya) Tepat satu karakter dalam posisi itu.

Karakter selain kartubebas adalah karakter harfiah. Misalnya, searchPattern untai (karakter) "*t" mencari semua nama yang path diakhir dengan huruf "t". String searchPattern "s*" mencari semua nama di path awal dengan huruf "s".

Note

.NET Framework only: Saat Anda menggunakan karakter wildcard tanda bintang di searchPattern dan Anda menentukan ekstensi file tiga karakter, misalnya, "*.txt", metode ini juga mengembalikan file dengan ekstensi yang begin dengan ekstensi yang ditentukan. Misalnya, pola pencarian "*.xls" mengembalikan "book.xls" dan "book.xlsx". Perilaku ini hanya terjadi jika tanda bintang digunakan dalam pola pencarian dan ekstensi file yang disediakan tepat tiga karakter. Jika Anda menggunakan karakter kartubebas tanda tanya di suatu tempat dalam pola pencarian, metode ini hanya mengembalikan file yang sama persis dengan ekstensi file yang ditentukan. Tabel berikut menggambarkan anomali ini dalam .NET Framework.

File dalam direktori Pola pencarian .NET 5+ mengembalikan .NET Framework mengembalikan
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 tidak dapat berakhir dalam dua titik ("..") atau berisi dua titik ("..") diikuti oleh DirectorySeparatorChar atau AltDirectorySeparatorChar, juga tidak boleh berisi karakter yang tidak valid. Anda dapat mengkueri karakter yang tidak valid dengan menggunakan metode GetInvalidPathChars.

Anda dapat menentukan informasi jalur relatif dengan path parameter . Informasi jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini, yang dapat Anda tentukan dengan menggunakan metode .GetCurrentDirectory

Metode EnumerateFiles dan GetFiles berbeda sebagai berikut: Ketika Anda menggunakan EnumerateFiles, Anda dapat mulai menghitung koleksi nama sebelum seluruh koleksi dikembalikan; ketika Anda menggunakan GetFiles, Anda harus menunggu seluruh array nama dikembalikan sebelum Anda dapat mengakses array. Oleh karena itu, ketika Anda bekerja dengan banyak file dan direktori, EnumerateFiles bisa lebih efisien.

Koleksi yang dikembalikan tidak di-cache. Setiap panggilan ke GetEnumerator pada koleksi memulai enumerasi baru.

Berlaku untuk