Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 552

/ вопрос открыт /

Меня Зовут Стас. Я начинающий программер на Delphi. Хотя преход с
паскаля на дельфи быстро преодолел, но ещё мало что умею (с паскалём,
вроде, неплохо - езжу на областные олинмпиады поинформе).
Я прочитал статью "Обход дерева каталогов с прерыванием и
возобновлением или "Куда мы идем завтра?" на Delphi.int.ru. Так вот
какая у мя проблемма. Она похожа на рассматриваемую в статье. У меня
на форме есть два скреплённых объекта - TshellList- и
TshellTree- Wiew. Мне нужно обойти все подкаталоги и загрузить все
вайлы в TrichEdit(короче - всё,что есть в папке слить в одно текстовое
поле RichEdit)! Функция, которая загружает один файл у меня написана,
но проблемы возникли с написанием рекурсивного алгоритма - как не
пытался с помощью GetNext и GetNextSubling, но ничего не вышло.(руки,
видать, не стого места растут.. :-) .. ) Так что помогите, плиз,
написать такой алгоритм! Хотябы расскажите как пользоваться методом
GetNExt и GetNextSubling!

Grin Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Grin (статус: Посетитель)
Вопрос отправлен: 5 мая 2007, 07:09
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Grin!
А мож задачку переформулируем? Зачем сканировать тревью, если можно напрямик? Вот набросок кода

//Это наша процедура обработки файлов
procedure MyLoadFile(fn:string);
begin
form1.Memo1.Lines.Add(fn);
end;
//Ну это собственно сканирование
procedure Scan(dir:string);
var fs:TSearchRec;
begin
if FindFirst(dir+'\*.*',faAnyFile,fs)=0 then
repeat
if (fs.Name='.') or (fs.Name='..') then
Continue;
if (fs.Attr and faDirectory) <>0 then
Scan(dir+'\'+fs.Name)
else
MyLoadFile(dir+'\'+fs.Name);
until FindNext(fs)<>0;
FindClose(fs);
end;

Пользуемся так
Scan('C:\Windows\System32'); //Без слеша в конце!!!
Если путь приходит извне, то проконтролировать слеш в конце можно функцией
ExcludeTrailingPathDelimiter(dir)
Она уберёт слеш в конце( а если нечайно в новых виндах разделить другой будет для каталогов, то его)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 мая 2007, 17:26
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.03 сек.