Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
718 of 1492 menu
◀ ▶

Метод EnumerateFiles

Directory.EnumerateFiles возвращает IEnumerable<string>, а не массив: элементы читаются по мере обхода. Сразу весь список в память даёт GetFiles с типом string[]. Маска и SearchOption работают так же. Есть EnumerateFilesAsync.

Синтаксис

IEnumerable<string> seq = Directory.EnumerateFiles(path); IEnumerable<string> seq = Directory.EnumerateFiles( path, "*.txt");

Пример

Давайте посчитаем файлы через foreach:

using System; using System.IO; class Program { static void Main() { Directory.CreateDirectory("abcde"); File.WriteAllText("abcde/12345.txt", "12345"); File.WriteAllText("abcde/67890.txt", "67890"); int res = 0; foreach (string _ in Directory.EnumerateFiles("abcde")) { res++; } Console.WriteLine(res); Directory.Delete("abcde", true); } }

Результат выполнения кода:

2

Пример

Давайте отфильтруем по маске "*.txt":

using System; using System.IO; class Program { static void Main() { Directory.CreateDirectory("abcde"); File.WriteAllText("abcde/12345.txt", "12345"); File.WriteAllText("abcde/67890.dat", "67890"); int res = 0; foreach (string _ in Directory.EnumerateFiles( "abcde", "*.txt")) { res++; } Console.WriteLine(res); Directory.Delete("abcde", true); } }

Результат выполнения кода:

1

Пример

Давайте сравним с GetFiles - число элементов совпадает:

using System; using System.IO; using System.Linq; class Program { static void Main() { Directory.CreateDirectory("abcde"); File.WriteAllText("abcde/12345.txt", "12345"); int lazy = Directory.EnumerateFiles("abcde").Count(); int arr = Directory.GetFiles("abcde").Length; Console.WriteLine(lazy == arr); Directory.Delete("abcde", true); } }

Результат выполнения кода:

True

Смотрите также

  • метод GetFiles,
    который сразу возвращает массив
  • метод EnumerateDirectories,
    который лениво обходит папки
  • метод GetFileSystemEntries,
    который смешивает файлы и каталоги
  • File,
    которым создают файлы для обхода
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить