Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.11.2006, 06:32   #1
Dunpeal
Пользователь
 
Регистрация: 16.11.2006
Сообщений: 28
Вопрос древо каталогов

Доброго всем время суток.
У меня вот какой вопрос: Как получить пути всех вложенных папок в указанной папке. Например, в папке Windows мне нужно получить пути всех находящихся там папок и записать их в *.txt. Причем уровень вложения +∞, т.е. и пути папок находящихся в system32 и в temp и т.д. и .т.п. Корневую папку указываю через ShellListView.
Dunpeal вне форума
Старый 16.11.2006, 14:25   #2
selenux
Пользователь
 
Регистрация: 14.11.2006
Сообщений: 23
По умолчанию

Можно попрововать бросить DirectoryListBox

Установить путь DirectoryListBox1.Directory := 'C:\WINDOWS';

и таким макаром обрабатывать. TDirectoryListBox потомок TCustomListBox

Последний раз редактировалось selenux; 16.11.2006 в 16:10.
selenux вне форума
Старый 17.11.2006, 07:52   #3
Dunpeal
Пользователь
 
Регистрация: 16.11.2006
Сообщений: 28
По умолчанию

Ммм... Не понимаю... ShellListView.Root, делает то же что и DirectoryListBox1.Directory. Как сделать обход всех вложенных папок и зафиксировать их имена и путь?
Dunpeal вне форума
Старый 17.11.2006, 10:28   #4
selenux
Пользователь
 
Регистрация: 14.11.2006
Сообщений: 23
По умолчанию

Привычка, отсюда и DirectoryListBox. Вложенные папки сканируются рекурсивно(Если Count=0 то вложенных папок нет)
selenux вне форума
Старый 20.11.2006, 08:00   #5
Dunpeal
Пользователь
 
Регистрация: 16.11.2006
Сообщений: 28
По умолчанию

Нашёл как это делается... Осталось узнать как со 100% вероятностью определить каталог это или как раз наоборот... Сейчас есть 1 косяк: если в названии каталога есть точка, то программа не заносит его в список.

Вот алгоритм:

Код:
public
f1:TextFile;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(f1,'C:\123.txt');
Rewrite(f1);
ScanDir(ShellListView1.Folders[ShellListView1.ItemIndex].PathName,'*.',True);
CloseFile(f1);
end;
 
procedure TForm1.ScanDir(Path:string; SearchMask:String; ScanSub:boolean);
var SearchRec:TSearchrec;
a:integer;
begin
if ScanSub then
begin
FindFirst(path+'\*.',faDirectory,SearchRec);
FindNext(SearchRec);
a:=FindNext(SearchRec);
while a=0 do
begin
if (SearchRec.Attr and faDirectory)>0 then
ScanDir(Path+'\'+SearchRec.Name,SearchMask,ScanSub);
a:=FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
a:=FindFirst(Path+'\'+SearchMask,faDirectory,SearchRec);
while a=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
Writeln(f1,Path+'\'+SearchRec.Name);
a:=FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
Dunpeal вне форума
Старый 20.11.2006, 12:34   #6
selenux
Пользователь
 
Регистрация: 14.11.2006
Сообщений: 23
По умолчанию

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

надо попробовать не \*. а \*
selenux вне форума
Старый 21.11.2006, 06:22   #7
Dunpeal
Пользователь
 
Регистрация: 16.11.2006
Сообщений: 28
По умолчанию

Я тоже так думал, но оказалось что маска *. выводит все что НЕ содержит точку... В общем-то удобно, но если в названии каталога есть точка, то он не заносит этот каталог в список...
А маска * выводит вообще все что найдет.
Надо как-то проверять не через маску... Например у ShellListView есть функция проверки IsFolder, если каталог то True. Но чтобы ею воспользоваться надо сначала в Root занести путь к каталогу, содержащему проверяемый файл, а потом ещё узнать какой он по счёту... Геморройно в общем... Может это как-то можно сделать через переменные Windows? Как-то же он понимает файл это или каталог.
Dunpeal вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имена каталогов и подкаталогов Xandr Общие вопросы Delphi 11 29.03.2010 21:36
Помогите как сделать отображение каталогов??? SANTA_KLAUD Общие вопросы Delphi 6 30.04.2008 23:47
список каталогов VVVadim Общие вопросы Delphi 11 03.04.2008 13:00
Создание удаление каталогов, копирование файлов. Alar Общие вопросы Delphi 1 18.12.2007 18:30
Дерево каталогов в табличной форме Македонский Общие вопросы Delphi 11 30.08.2007 16:47