Erik N
asked on
Problems with FindFileInTree!!!
I am looking for a syntax example of FindFileInTree...
Example:
I may want to find out if a certain file, say "Test.txt" is existing in a tree where the I select the "Main"-directory. If the file exists in more than one place( withing the tree), I would like to find all the paths for the file "Test.txt"....
Is this possible?
I run Delphi Developer 2.0...
Thanx!
/Erik N
Example:
I may want to find out if a certain file, say "Test.txt" is existing in a tree where the I select the "Main"-directory. If the file exists in more than one place( withing the tree), I would like to find all the paths for the file "Test.txt"....
Is this possible?
I run Delphi Developer 2.0...
Thanx!
/Erik N
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
vladika: just too late :)
Mine implements it in a thread, but the search is the same.
Mine implements it in a thread, but the search is the same.
The most important method is TFindFile.FindFile:
It first searches for files mathing the search.
The searches all directories and recurses to itself.
This is the unit for the TThread object TFindFile
*** begin of code ***
unit Unit2;
interface
uses
Classes,StdCtrls,SysUtils;
type
TFindFile = class(TThread)
private
{ Private declarations }
procedure FindFile(const AStartDir : String; const ASearchString : String; AMemo : TMemo);
procedure ShowFound;
procedure ShowDir;
protected
procedure Execute; override;
public
FStartDir : String;
FSearchString : String;
FMemo : TMemo;
FFound : String;
FLabel : TLabel;
FPath : String;
end;
implementation
procedure TFindFile.ShowFound;
begin
FMemo.Lines.Add(FFound);
end;
procedure TFindFile.ShowDir;
begin
FLabel.Caption:=FPath;
end;
procedure TFindFile.FindFile(const AStartDir : String; const ASearchString : String; AMemo : TMemo);
var
sr : TSearchRec;
r : Integer;
begin
r:=FindFirst(AStartDir+ASe
while r = 0 do begin
FFound:=AStartDir+sr.Name;
Synchronize(ShowFound);
r := FindNext(sr);
end;
FindClose(sr);
r:=FindFirst(AStartDir+'*'
while r = 0 do begin
if (sr.Attr and faDirectory <> 0) and (sr.Name<>'.') and (sr.Name<>'..') then begin
FPath:=AStartDir+sr.Name+'
Synchronize(ShowDir);
FindFile(AStartDir+sr.Name
end;
r:=FindNext(sr);
end;
FindClose(sr);
end;
procedure TFindFile.Execute;
begin
FindFile(FStartDir,FSearch
end;
end.
*** end of code ***
To show how to use the TTheard ovbject TFind file here is an example form unit:
*** begin of code ***
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,unit2;
type
TForm1 = class(TForm)
btnSearch: TButton;
mmResult: TMemo;
Label1: TLabel;
btnStop: TButton;
edStartDir: TEdit;
edSearchString: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure btnSearchClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
private
{ Private declarations }
ff : TFindFile;
procedure SearchFile(
const StartDir : String;
const SearchString : String;
AMemo : TMemo;
ALabel : TLabel );
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SearchFile(const StartDir : String; const SearchString : String; AMemo : TMemo; ALabel : TLabel);
begin
ff:=TFindFile.Create(True)
with ff do begin
FStartDir := StartDir;
FSearchString := SearchString;
FMemo := AMemo;
FLabel:=ALabel;
btnSearch.Enabled:=False;
btnStop.Enabled:=True;
Suspended:=False;
end;
end;
procedure TForm1.btnSearchClick(Send
begin
mmResult.Lines.Clear;
SearchFile(edStartDir.Text
end;
procedure TForm1.btnStopClick(Sender
begin
ff.Suspend;
ff.Free;
btnStop.Enabled := False;
btnSearch.Enabled := True;
end;
end.
*** end of code ***
The form file of this unit is the following:
*** begin of code ***
object Form1: TForm1
Left = 209
Top = 126
Width = 530
Height = 300
Caption = 'Form1'
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 104
Width = 417
Height = 13
AutoSize = False
Caption = 'Label1'
end
object Label2: TLabel
Left = 8
Top = 160
Width = 33
Height = 13
Caption = 'Startdir'
end
object Label3: TLabel
Left = 8
Top = 184
Width = 32
Height = 13
Caption = 'Label3'
end
object btnSearch: TButton
Left = 8
Top = 128
Width = 75
Height = 25
Caption = 'Search'
TabOrder = 0
OnClick = btnSearchClick
end
object mmResult: TMemo
Left = 8
Top = 8
Width = 417
Height = 89
Lines.Strings = (
'mmResult')
TabOrder = 1
end
object btnStop: TButton
Left = 88
Top = 128
Width = 75
Height = 25
Caption = 'Stop'
Enabled = False
TabOrder = 2
OnClick = btnStopClick
end
object edStartDir: TEdit
Left = 104
Top = 160
Width = 225
Height = 21
TabOrder = 3
Text = 'C:\'
end
object edSearchString: TEdit
Left = 104
Top = 184
Width = 225
Height = 21
TabOrder = 4
Text = '*.Txt'
end
end
*** end of code ***
Hope this answered your question
Regards Jacco