Question and Answer Database FAQ2784D.txt How do I recurse sub directories? Category :Object Pascal Platform :All Product :All 32 bit Question: How do I recurse sub directories? Answer: You will need to use Delphi's FindFirst() and FindNext() procedures to create a list of all the sub directories in a directory. For each sub directory, you will need to use Delphi's FindFirst() and FindNext() procedures, again to add any sub directories of the found directories to the list. Continue working down the list until all the directories have been processed. Example: procedure GetDirectories(const DirStr : string; ListBox : TListBox); var DirInfo: TSearchRec; r : Integer; begin r := FindFirst(DirStr + '\*.*', FaDirectory, DirInfo); while r = 0 do begin Application.ProcessMessages; if ((DirInfo.Attr and FaDirectory = FaDirectory) and (DirInfo.Name <> '.') and (DirInfo.Name <> '..')) then ListBox.Items.Add(DirStr + '\' + DirInfo.Name); r := FindNext(DirInfo); end; SysUtils.FindClose(DirInfo); end; procedure GetFiles(const DirStr : string; ListBox : TListBox); var DirInfo: TSearchRec; r : Integer; begin r := FindFirst(DirStr + '\*.*', FaAnyfile, DirInfo); while r = 0 do begin Application.ProcessMessages; if ((DirInfo.Attr and FaDirectory <> FaDirectory) and (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then ListBox.Items.Add(DirStr + '\' + DirInfo.Name); r := FindNext(DirInfo); end; SysUtils.FindClose(DirInfo); end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin ListBox1.Items.Clear; ListBox2.Items.Clear; ListBox1.Items.Add('C:\Delphi'); GetDirectories('C:\Delphi', ListBox1); i := 1; while i < ListBox1.Items.Count do begin GetDirectories(ListBox1.Items[i], ListBox1); Inc(i); end; end; procedure TForm1.ListBox1Click(Sender: TObject); begin ListBox2.Clear; GetFiles(ListBox1.Items[ListBox1.ItemIndex], ListBox2); end; Note: Recursing directories can take up a lot of memory. It is suggested that you consider creating a linked list or a temporary file to store your list entries instead of using a component (such as a Memo or StringList), as there are limits to the number of entries these components can have. 7/16/98 4:31:28 PM
Last Modified: 01-SEP-99