Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Можно ли переписать данный метод с использованием EnumerateDirectories?

#c_sharp #net


Не сказал бы, что у меня много папок, которые замедлят работу, но просто интересно.    

static IEnumerable GetFiles(string path)
            {
                Queue queue = new Queue();
                queue.Enqueue(path);
                while (queue.Count > 0)
                {
                    path = queue.Dequeue();
                    try
                    {
                        foreach (string subDir in Directory.GetDirectories(path))//Вот тут
                        {
                            queue.Enqueue(subDir);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Error.WriteLine(ex);
                    }
                    foreach (string t in Directory.EnumerateFiles(path))
                    {
                        yield return t;
                    }
                }
            }

    


Ответы

Ответ 1



Если вы хотите в одном цикле обработать и папки и файлы, то можно воспользоваться классом DirectoryInfo и переписать цикл так: var dir = new DirectoryInfo(path); foreach(var fso in dir.EnumerateFileSystemInfos()) { if(fso is DirectoryInfo) queue.Enqueue(fso.FullName); if(fso is FileInfo)//перестраховка, по идее должно хватить просто else yield return fso.FullName; } Можно также воспользоваться перегрузкой метода Directory.GetFiles которая дает тот же результат: Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories); Но с одним недостатком - метод упадет с исключением если у вашей программы, например не хватит прав на чтение какой-то папки.

Комментариев нет:

Отправить комментарий