Рекурсия и IEnumerable - Обход всех файлов из директории - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Требуется написать обход всех файлов из директории. Слепил вот такой велосипед, но рекурсия здесь не работает. Как можно сделать по другому?
        static IEnumerable<FileInfo> getAllFilesFromDirectory( DirectoryInfo root )
        {
            FileInfo[] files = null;
            DirectoryInfo[] subDirs = null;
 
            try 
            { files = root.GetFiles(); }
            catch ( Exception e ) 
            { Console.Error.WriteLine( e.Message ); }
 
            if ( files == null ) yield break;
            foreach ( var file in files ) 
            {
                Console.WriteLine(file.FullName);
                yield return file;
            }
 
            subDirs = root.GetDirectories();
            foreach ( var dirInfo in subDirs ) getAllFilesFromDirectory( dirInfo );
        }
Проблема решена:
        static IEnumerable<FileInfo> getAllFilesFromDirectory( DirectoryInfo root )
        {
            FileInfo[] files = null;
            DirectoryInfo[] subDirs = null;
 
            try 
            { files = root.GetFiles(); }
            catch ( Exception e ) 
            { Console.Error.WriteLine( e.Message ); }
 
            if ( files == null ) yield break;
            foreach ( var file in files ) 
            {
                Console.WriteLine(file.FullName);
                yield return file;
            }
 
            subDirs = root.GetDirectories();
            foreach ( var dirInfo in subDirs )
                foreach ( var file in getAllFilesFromDirectory( dirInfo ) )
                    yield return file;
        }
Есть варианты по улучшению? А то мне кажется, что это какой то бред...

Решение задачи: «Рекурсия и IEnumerable - Обход всех файлов из директории»

textual
Листинг программы
new DirectoryInfo("путь").GetFiles("*", SearchOption.AllDirectories)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы