рекурсивный алгоритм для файловой структуры для одного типа файла

1

Мне нужен алгоритм, который генерирует файловую структуру, начиная с указанной пользователем директории, но имеет в ней только определенный тип файла (.resx). Пока у меня есть код ниже, который показывает структуру файла и отображает только файлы.resx, но проблема в том, что он показывает все каталоги, которые также не содержат файл.resx. т.е. если treeviewitem или любой из его дочерних элементов не содержит файл.resx, его не должно быть.

void DirSearch(string sDir, TreeViewItem parentItem)
    {
        try
        {
            foreach (string d in Directory.GetDirectories(sDir))
            {
                TreeViewItem item = new TreeViewItem();
                item.Header = d;
                parentItem.Items.Add(item);
                foreach (string f in Directory.GetFiles(d, "*.resx"))
                    {
                        TreeViewItem subitem = new TreeViewItem();
                        subitem.Header = f;
                        subitem.Tag = f;
                        item.Items.Add(subitem);
                    }
                DirSearch(d, item);
            }

        }
        catch (System.Exception excpt)
        {
            Console.WriteLine(excpt.Message);
        }
    }
Теги:
wpf
treeview

1 ответ

1
Лучший ответ

Добавьте TreeViewItem, представляющий каталог для своего родителя, только если у него есть дочерние элементы (*.resx файлы или подкаталоги, содержащие *.resx файлы). Обратите внимание, что DirSearch вызывается рекурсивно до того, как будет выполнена эта проверка.

    void DirSearch(string sDir, TreeViewItem parentItem)
    {
        ......

        foreach (string d in Directory.GetDirectories(sDir))
        {
            TreeViewItem item = new TreeViewItem();
            item.Header = d;
            foreach (string f in Directory.GetFiles(d, "*.resx"))
            {
                TreeViewItem subitem = new TreeViewItem();
                subitem.Header = f;
                subitem.Tag = f;
                item.Items.Add(subitem);
            }
            DirSearch(d, item);

            if (item.Items.Count > 0)
                parentItem.Items.Add(item);
        }

        ......
    }
  • 0
    @ elgonzo- Отлично! Спасибо. Мне снятся кошмары о рекурсии, я ненавижу, когда мне приходится этим пользоваться.
  • 0
    @ user1003131, не волнуйся, эти кошмары со временем исчезнут. Я говорю из опыта ...;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню