SearchOption
SearchOption используют с
Directory.EnumerateFiles
и Directory.GetFiles.
TopDirectoryOnly - только указанный
каталог. AllDirectories - и
вложенные, например abcde/inner.
Синтаксис
IEnumerable<string> seq = Directory.EnumerateFiles(
path, "*.*", SearchOption.AllDirectories);
Пример
Давайте посчитать файлы только в корне
abcde:
using System;
using System.IO;
class Program
{
static void Main()
{
Directory.CreateDirectory("abcde/inner");
File.WriteAllText("abcde/abcde.txt", "abcde");
File.WriteAllText("abcde/inner/12345.txt", "12345");
int res = 0;
foreach (string _ in Directory.EnumerateFiles(
"abcde", "*.*", SearchOption.TopDirectoryOnly))
{
res++;
}
Console.WriteLine(res);
Directory.Delete("abcde", true);
}
}
Результат выполнения кода:
1
Пример
Давайте найти файлы во всех подпапках:
using System;
using System.IO;
class Program
{
static void Main()
{
Directory.CreateDirectory("abcde/inner");
File.WriteAllText("abcde/abcde.txt", "abcde");
File.WriteAllText("abcde/inner/12345.txt", "12345");
int res = 0;
foreach (string _ in Directory.EnumerateFiles(
"abcde", "*.*", SearchOption.AllDirectories))
{
res++;
}
Console.WriteLine(res);
Directory.Delete("abcde", true);
}
}
Результат выполнения кода:
2
Пример
Давайте сравнить с GetFiles:
using System;
using System.IO;
class Program
{
static void Main()
{
Directory.CreateDirectory("abcde/inner");
File.WriteAllText("abcde/abcde.txt", "abcde");
File.WriteAllText("abcde/inner/12345.txt", "12345");
int lazy = 0;
foreach (string _ in Directory.EnumerateFiles(
"abcde", "*.*", SearchOption.AllDirectories))
{
lazy++;
}
int arr = Directory.GetFiles(
"abcde", "*.*", SearchOption.AllDirectories).Length;
Console.WriteLine(lazy == arr);
Directory.Delete("abcde", true);
}
}
Результат выполнения кода:
True
Смотрите также
-
EnumerateFiles,
ленивый перебор путей -
FileAttributes,
флаги найденных файлов -
FileMode,
открытие найденного файла -
FileAccess,
доступ при чтении потоком