В чем разница между EnumerateFiles и EnumerateFileSystemEntries в.NET 4?

В.Net 4 есть две функции для перечисления файлов в пути. EnumerateFiles и EnumerateFileSystemEntries. MSDN не дает достаточно объяснений относительно их различий. Каковы эти различия?

Ответ 1

EnumerateFileSystemEntries => перечисляет файлы, каталоги и файлы и каталоги.

EnumerateFiles => для перечисления только файлов. (Не каталоги)

Ответ 3

Как ответили @Habib и @Sergey, вам нужно использовать EnumerateFileSystemEntries вместо EnumerateFiles. Я буду расширять их ответы на примере.

  • EnumerateFiles: возвращает перечисляемую коллекцию имен файлов, которые соответствуют шаблону поиска по указанному пути, и при необходимости выполняет поиск в подкаталогах.
  • EnumerateFileSystemEntries: возвращает перечисляемую коллекцию имен файлов и каталогов по указанному пути.

Вот код, чтобы продемонстрировать разницу:

public static void Main()
{
    Directory.CreateDirectory("dir");
    Directory.CreateDirectory("dir2");
    File.WriteAllText(Path.Combine("dir", Path.GetRandomFileName()), "file");
    var datapath = ".";

    var files = Directory.EnumerateFiles(datapath, "*", SearchOption.AllDirectories);
    files.Dump();

    var fileSystemEntries  = Directory.EnumerateFileSystemEntries(datapath, "*", SearchOption.AllDirectories);
    fileSystemEntries.Dump();
}

выход

Dumping object(System.IO.FileSystemEnumerableIterator'1[String])
[
   .\dir\epp3114y.jjr
]
Dumping object(System.IO.FileSystemEnumerableIterator'1[String])
[
   .\dir
   ,
   .\dir2
   ,
   .\dir\epp3114y.jjr
]

Попробуйте онлайн!