Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Состав папки


Автор: Serebrus 15.8.2007, 13:46
Дорогие коллеги.
У меня к вам один несложный (для вас) вопрос:
Дана конкретная папка. Как можно составить иерархический список составляющих подпапок и файлов?
Напишите пожалуйста код.
Спосибо за ответ.

Автор: _hunter 15.8.2007, 14:33
ищи по форуму "FindFirst"...

Автор: Serebrus 15.8.2007, 20:03
Спосибо но, мне нужен конкретный код

Автор: dumb 15.8.2007, 20:11
Цитата(Serebrus @  15.8.2007,  13:46 Найти цитируемый пост)
Дорогие коллеги.
Цитата(Serebrus @  15.8.2007,  20:03 Найти цитируемый пост)
мне нужен конкретный код 

Проследуйте в http://forum.vingrad.ru/forum/Vingrad-help-center.html, "коллега".

Автор: Snowy 15.8.2007, 20:14
Вопрос забитый и истасканый.
Конкретный код в любом факе.
Например www.drkb.ru

Автор: Serebrus 16.8.2007, 14:36
Я скачал базу DRKB, но в приведенных в нем примерах нету не одного явно подходящего. В примерах осуществляется поиск, но результат поиска не имеет иерархический вид.

Автор: Snowy 16.8.2007, 15:02
Вид иерархического списка зависит от целей.
Они известны тебе.
Может ты хочешь построить его визуально в виде TTreeView, а может в памяти.
А, если в памяти, то какая информация тебе нужна? Будут это объекты, структуры или просто списки типа TStringList?
Способ организации списка зависит от целей его использования.
Понятие иерархического списка довольно абстрактно. Иерархию можно построить из чего угодно.
В общем случае, код будет отличаться тем, что будет дополнительно передаваться в рекурсивную процедуру ссылка на родителя, которому и будут добавляться элементы иерархии.

Автор: Serebrus 17.8.2007, 09:10
Я бы хотел составить из данного каталога простую иерархию, типа:

D:\
     Folder 1
                 File 1
                 File 2
     Folder 2
     Folder 3
                 File 4

Сам иду по токой логике:

Цитата

var
  Form1: TForm1;
  STL: array[1..100] of TStringList; //100-eto primerno

implementation

{$R *.dfm}

procedure Scan(Root: String; n: Integer);
var SR: TSearchRec;
begin
STL[n]:=TStringList.Create;
if FindFirst(Root+'\*.*', faAnyFile, SR)=0 then
 repeat
  if (SR.Name<>'.')and(SR.Name<>'..') then
   STL[n].Add(SR.Name);
  //Form1.Memo1.Lines.Add(SR.Name);
 until FindNext(SR)<>0;
FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,m,n: Integer;
    Root: String;
begin
Root:='D:\Îò÷åò KBase';
Scan(Root,1);
n:=STL[1].Count;
for i:=2 to n do
 if STL[i-1].Count<>0 then
  for m:=1 to STL[i-1].Count do
   Scan(Root+STL[i-1].Strings[m-1],i);
for j:=1 to n do
 for k:=1 to STL[j].Count do
  Memo1.Lines.Add(STL[j].Strings[k-1]);
end;


помогите пожалуйста доделать.

Автор: KL911 18.8.2007, 02:39
Цитата

D:\
     Folder 1
                 File 1
                 File 2
     Folder 2
     Folder 3
                 File 4


Вот... сделал что-то похожее... 
делал на быструю руку... только для примера... дерево будет выводиться на Memo1 

Код

var
  Form1: TForm1;
implementation

{$R *.dfm}
function Abzac(n:integer):string;
var i:integer; res:string;
begin
   res:='';
   for i := 1 to (n*3) do
      res:=res+' ';
   Abzac:=res
end;

procedure Scan(Root:string;n:integer);
var SR:TSearchRec;
begin
   if FindFirst(Root+'*.*',faAnyFile,SR)=0 then
      repeat
        if (SR.Name<>'.')and(SR.Name<>'..') then
        if (SR.Attr=16) then
         begin
            Form1.Memo1.Lines.Add(Abzac(n)+SR.Name);
            n:=n+1;
            Scan(Root+SR.Name+'\',n);
            n:=n-1;
         end;
      until (FindNext(SR)<>0);
   FindClose(SR);

   if FindFirst(Root+'*.*',faAnyFile,SR)=0 then
      repeat
        if (SR.Name<>'.')and(SR.Name<>'..') then
        begin
         if (SR.Attr<>16) then
           Form1.Memo1.Lines.Add(Abzac(n)+SR.Name);
        end;
      until (FindNext(SR)<>0);
   FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,m,n: integer;
    Root: string;
begin
    Root:='C:\';
    Memo1.Lines.Add(Root);
    Scan(Root,1);
end;

end.


в процедуре Scan 2 раза происходит поиск... для того чтобы вначале шли папки а потом файлы... 
ето конечно совершенно не рационально ... но если понадобиться можно по красивше всё ето сделать.... 

P.S.: не ругаться если что не так... уже как 2 месяца на C# сижу... мог подзабыть всёsmile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)