Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перебрать все узлы VirtualTreeView ? 
V
    Опции темы
Erazer
Дата 12.6.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



Есть дерево символизирующее файловую систему,каждый узел папка или файл.
Нужно перебрать все ветви и составить список путей к файлам.
Есть зацепка,файлы не имеют дочерних узлов соответственно их можно идентифицировать,знаю как перебрать все узлы,но не знаю как перебрать непосредственно каждую из ветвей.
Т.е. папка "C:\My Music\tags\temp\" выглядит как "C:"+"My Music"+"tags"+"temp"+имена файлов.
нужно собрать все это в строку и перейти на след ветку, вопрос в том как это сделать...
говорят Path реализует то что нужно,но нигде не вижу описания или примера работы с ней  smile 
PM MAIL   Вверх
MetalFan
Дата 12.6.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



GetFirst+GetNext?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Erazer
Дата 12.6.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



Так нечестно!!!Ты знал!!!!! Ты Знал!!!! smile понятно что без этого не обойтись, другой вопрос КАК ИМЕННО? smile 
Код

    for I := 0 to VT.TotalCount - 1 do
    begin
      if I <> 0 then
        NewNode := VT.GetNext(NewNode)
      else
        NewNode := VT.GetFirst;

      FileNode := VT.GetNodeData(NewNode);
      if Assigned(FileNode) then
      begin
        showmessage(VT.Path(NewNode,0,ttNormal,'\'));
      end;
    end;

Такой код дает следующие результаты "c:\","c:\my music\","c:\my music\6chan.ogg\","c:\my music\6chan.wma\"
Теперь думаю как с этим работать, допустим если определять файл это или еще нет чрез наличие расширения, то в случае наличия в названии папки точки,"sdg.sdgfdg786" она воспринимается как файл с расширением :( а проверять через directoryexists не совсем нормально скажем так.. 

Это сообщение отредактировал(а) Erazer - 12.6.2008, 13:56
PM MAIL   Вверх
Poseidon
Дата 12.6.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



А как у тебя дерево заполняется? Может на этапе заполнения указывать ветке что там файл/папка?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
aktuba
Дата 12.6.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата(Erazer @  12.6.2008,  14:54 Найти цитируемый пост)
Теперь думаю как с этим работать, допустим если определять файл это или еще нет чрез наличие расширения, то в случае наличия в названии папки точки,"sdg.sdgfdg786" она воспринимается как файл с расширением :( а проверять через directoryexists не совсем нормально скажем так.. 

Так проверяй аттрибуты - они дл этого и созданы. Например, faDirectory...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MetalFan
Дата 12.6.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Erazer @  12.6.2008,  13:54 Найти цитируемый пост)
    for I := 0 to VT.TotalCount - 1 do
    begin
      if I <> 0 then
        NewNode := VT.GetNext(NewNode)
      else
        NewNode := VT.GetFirst;
      FileNode := VT.GetNodeData(NewNode);
      if Assigned(FileNode) then
      begin
        showmessage(VT.Path(NewNode,0,ttNormal,'\'));
      end;
    end;

что за бредовый код обхода?
обход дерева VT выглядит проще:
Код

  lNode := VT.GetFirst;
  while Assigned(lNode) do
  begin
    //
    lNode := VT.GetNext(lNode);
  end;

при заполнении дерева ставь флаг, файл это или папка. зачем потом мудрить то?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Erazer
Дата 12.6.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



Цитата(MetalFan @  12.6.2008,  19:41 Найти цитируемый пост)
при заполнении дерева ставь флаг, файл это или папка. зачем потом мудрить то?
  smile  вот оно то что я искал,проверять мне их не надо, я передаю процедуре построения узлов список файлов, если парсить каждую строку с конца то перввый "\"обозначает что все сто после него есть имя файла,+ взвести флаг и потом проверять его наличие.... Всем отозвавшимся большое пасибо!  smile

Добавлено через 11 минут и 30 секунд
странная задумка разрешать менять репутацию только после 100 постов  smile

Добавлено через 13 минут и 18 секунд
Цитата

Опыт сын ошибок трудных.... 


Это сообщение отредактировал(а) Erazer - 12.6.2008, 20:48
PM MAIL   Вверх
aktuba
Дата 12.6.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата(Erazer @  12.6.2008,  21:38 Найти цитируемый пост)
я передаю процедуре построения узлов список файлов, если парсить каждую строку с конца то перввый "\"обозначает что все сто после него есть имя файла,+ взвести флаг и потом проверять его наличие.... Всем отозвавшимся большое пасибо!

Уууу... Как все запущено...  smile 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Erazer
Дата 13.6.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



smile ну ПОКА как бы вот так...  smile   smile

Добавлено @ 13:21
я в принципе переосмыслил немного свою вчерашнюю задумку,вспомнил про ExcludeTrailingBackSlash, ExtractFilename, но естественно с удовольствием почитаю альтернативные варианты варианты  smile 

Это сообщение отредактировал(а) Erazer - 13.6.2008, 13:23
PM MAIL   Вверх
Erazer
Дата 16.6.2008, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



на практике это выглядит так  
Код


  var
    NewNode: PVirtualNode;
    FileNode: PFileNode;
  begin

 NewNode := VT.GetFirst;
while Assigned(NewNode) do
      begin
   FileNode := VT.GetNodeData(NewNode);
     // Делаю что хочу :).
LboxSrcPath.Items.Add(FileNode^.Name);
    //Конец произвола :-)
NewNode := VT.GetNext(NewNode);
      end;

PM MAIL   Вверх
Erazer
Дата 17.6.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 1.6.2008

Репутация: -1
Всего: -1



Цитата(aktuba @  12.6.2008,  23:26 Найти цитируемый пост)
Уууу... Как все запущено...

я просто добавил поле в котором если это файл храню полный путь к нему  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.