Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức EnumerateFiles trong C#

Phương thức Directory.EnumerateFiles() trả về IEnumerable<string> chứa đường dẫn các file, thực thi lười (lazy) - chỉ đọc khi duyệt, tiết kiệm bộ nhớ so với GetFiles() (trả về mảng, eager).

Cú pháp

Directory.EnumerateFiles(path, searchPattern, SearchOption.AllDirectories)

Ví dụ: Đệ quy tất cả file

foreach (string file in Directory.EnumerateFiles(@"D:\NEW", "*.*", SearchOption.AllDirectories))
{
    Console.WriteLine(file);
}

Mã nguồn hoàn chỉnh

using System;
using System.IO;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string allFiles in Directory.EnumerateFiles(@"D:\NEW", "*.*", SearchOption.AllDirectories))
            {
                Console.WriteLine(allFiles);
            }
        }
    }
}

Kết quả (ví dụ)

D:\NEW\my.txt
D:\NEW\amit.html
D:\NEW\tutorials\java\a.java

EnumerateFiles vs GetFiles

Đặc điểmEnumerateFilesGetFiles
Trả vềIEnumerable<string>string[]
Thực thiLazy (lười)Eager (ngay lập tức)
Bộ nhớTiết kiệm (streaming)Cấp phát toàn bộ mảng
Phù hợpThư mục lớn, nhiều fileThư mục nhỏ, cần mảng
ExceptionNém khi duyệt (deferred)Ném ngay khi gọi

SearchOption

SearchOption.TopDirectoryOnly    // Chỉ thư mục hiện tại (mặc định)
SearchOption.AllDirectories      // Đệ quy tất cả thư mục con

Search Pattern

"*.*"        // Tất cả file
"*.txt"      // Chỉ .txt
"report_?.pdf"  // report_1.pdf, report_A.pdf (ký tự đơn ?)
"data_[0-9].csv" // Không hỗ trợ regex, chỉ wildcard * ?

Lưu ý

  • EnumerateFiles ném UnauthorizedAccessException khi duyệt vào thư mục không có quyền - cần try-catch trong vòng lặp.
  • Kết hợp với EnumerateDirectories để duyệt cây thư mục tùy chỉnh.
  • .NET Core / .NET 5+: hỗ trợ EnumerationOptions cho kiểm soát chi tiết hơn (bỏ qua hidden, symlink, v.v.).