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

Ленивый перебор файлов в C#

Ленивое перечисление важно в больших каталогах: методы Directory.EnumerateFiles и DirectoryInfo.EnumerateFiles отдают имена по одному по мере обхода и не собирают весь список в память сразу.

Цикл можно прервать после нужного файла, и остальные имена с диска не читаются. Метод Directory.GetFiles сразу строит массив целиком. Вызов Count в примере доходит до конца списка.

Подготовим каталог с двумя текстовыми файлами и посчитаем их по маске "*.txt". Обход к этому моменту уже закончен, поэтому каталог удаляется. Пока перечислитель ещё открыт, каталог не удаляют и не переименовывают:

string root = Path.Combine(Path.GetTempPath(), "lazy-gamma"); Directory.CreateDirectory(root); File.WriteAllText(Path.Combine(root, "a.txt"), "1"); File.WriteAllText(Path.Combine(root, "b.txt"), "2"); DirectoryInfo dir = new DirectoryInfo(root); int count = dir.EnumerateFiles("*.txt").Count(); Console.WriteLine(count); // выведет 2 Directory.Delete(root, true);

В каталоге "inbox" создайте файлы "note.txt", "photo.png" и "draft.txt". Выведите, сколько файлов с расширением txt вернёт перечисление.

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