Рекурсивный обход директории

Автор Тема: Рекурсивный обход директории  (Прочитано 7590 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн iskander8Автор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Здравствуйте знатоки программирования под Autocad.
Появилась интересная задача сделать скрипт обхода директории причем все файлы должны быть сгруппированы под своими директориями так, чтобы можно было сделать отметку чекбокса на директории и все файлы находящиеся в этой папке тоже отметились, раньше такую штуку я видел в инсталяторе microsoft office 2007 там выбираешь целую ветку и чекбокс отмечается синим квадратом, если убрать одну из отметок на файле в этой директории, то квадратик бледнеет, показывая, что не все файлы выбраны. Да и изначально около каждой из директорий стоит плюсик, для ее раскрытия.
 
Вот код который обходит все папки и даже ставит чекбоксы напротив файлов, но это не совсем то, что я описал выше.

Код - C# [Выбрать]
  1. namespace FileTree
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.  
  6.         string filter = "*.dwg";
  7.         string Root = @"C:\test\"; // Корневая папка
  8.        
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.             this.textBox1.Text = Root;  
  13.         }
  14.  
  15.         private void Form1_Load(object sender, EventArgs e)
  16.         {
  17.             Tree.CheckBoxes = true;    
  18.         }
  19.  
  20.         private void button1_Click(object sender, EventArgs e)
  21.         {
  22.  
  23.         }
  24.  
  25.         private void textBox1_TextChanged(object sender, EventArgs e)
  26.         {
  27.              string GetDir = (sender as TextBox).Text;
  28.             Root = "";
  29.             if (Directory.Exists(GetDir))
  30.                 Root = GetDir;
  31.             SetStatus();
  32.             loadFiles();
  33.             //LoadFolder();
  34.         }
  35.        
  36.         private void LoadFolder() {
  37.             string[] fls = Directory.GetFiles(Root, filter, SearchOption.AllDirectories);
  38.            
  39.             HashSet<string> hs = new HashSet<string>();
  40.             foreach (string f in fls) {
  41.                 hs.Add(Path.GetDirectoryName(f));
  42.             }
  43.             Tree.Nodes.Clear();
  44.    
  45.             foreach (string s in hs) {
  46.                 TreeNode rootloc = Tree.Nodes.Add(s);
  47.                 rootloc.Nodes.Add("111");
  48.                
  49.                 TreeNode lev3 = rootloc.Nodes.Add("222");
  50.                 lev3.Nodes.Add("768768768");  
  51.             }
  52.         }
  53.        
  54.         private bool loadFiles() {
  55.             string[] fls = Directory.GetFiles(Root, filter, SearchOption.AllDirectories);
  56.             foreach (string f in fls) {
  57.                 Tree.Nodes.Add(f);    
  58.             }
  59.  
  60.             return false;
  61.         }
  62.        
  63.         private void SetStatus() {
  64.        
  65.             ok.Enabled = Root != "";
  66.         }
  67.  
  68.         private void Tree_AfterSelect(object sender, TreeViewEventArgs e)
  69.         {
  70.  
  71.         }
  72.     }
  73. }

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






Помогите пожалуйста решить задачу.
« Последнее редактирование: 24-03-2019, 15:22:13 от Александр Ривилис »

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Рекурсивный обход директории
« Ответ #1 : 24-03-2019, 13:44:35 »
А при чем тут Автокад?

Оффлайн iskander8Автор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Рекурсивный обход директории
« Ответ #2 : 24-03-2019, 14:05:08 »
Это приложение для автокада. Будет выводить файлы .dwg и их нужно будет проверять на ошибки библиотеками автокада. Ну и дальше с этими (отмеченными) файлами работать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Рекурсивный обход директории
« Ответ #3 : 24-03-2019, 15:21:46 »
iskander8,
Прочитай у меня в подписи правило о форматировании кода и соблюдай его!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн iskander8Автор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Рекурсивный обход директории
« Ответ #4 : 24-03-2019, 16:54:04 »
Простите подлеца, почитал как форматировать код, больше не повторится.

Отмечено как Решение Александр Ривилис 24-03-2019, 19:27:22

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Рекурсивный обход директории
« Ответ #5 : 24-03-2019, 18:54:40 »
Это вопрос из тех, на которые в интернете есть сотни готовых решений. И к автокаду это вообще никак не относится
Я потратил секунд 30 и нашел вот:
Пошаговое руководство. Создание интерфейса в стиле проводника с ListView и TreeView элементов управления с помощью конструктора (вообще на МСДН статья!)
List Drives and Folders in a TreeView Using C#
File Explorer using Treeview controller in C# 2.0
An "Explorer-Style" TreeView Control
и т.д. и т.п.
А все то, что вы описали в топике - это мелочи конкретно вашей реализации. Если вы хотите найти прям готовое решение - то нет. Его точно не будет. Если вы хотите, чтобы вам на форуме его сделали - то нет. Тут прям надо сесть и делать. И никто на форуме этого делать не будет, так как это обычная рутинная задачка и нам своих таких хватает =)

Оффлайн iskander8Автор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Рекурсивный обход директории
« Ответ #6 : 24-03-2019, 19:26:49 »
Спасибо, что пнули в нужную сторону, тему можно закрыть.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Рекурсивный обход директории
« Ответ #7 : 24-03-2019, 19:29:26 »
Спасибо, что пнули в нужную сторону, тему можно закрыть.
Посмотри еще эту дискуссию: https://stackoverflow.com/questions/5478984/treeview-with-checkboxes-in-c-sharp
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Рекурсивный обход директории
« Ответ #8 : 25-03-2019, 10:11:06 »
Я бы напомнил, что рекурсивно обходя директории на сервере, можно нарваться на отсутствие прав на чтение из директории (был печальный опыт). Просто нужно об этом помнить и учитывать.