本人采用RzShelltree能够获得指定的文件夹路径,然后采用Delphi 7 组建编程参考手册上的递归搜索文件夹中的文件代码,可是代码运行没问题,但是 FileListBox 为空白,请高手指点,多谢。代码如下procedure TForm7.FindFiles(APath : string);
var
FindResult:integer;
FFileName : string;
FSearchRec, DSearchRec: TSearchRec;
Function IsDirNotation(ADirName: string):Boolean;
begin
Result:=(ADirName='.') or (ADirName='..');
end;
begin
if APath<>'' then
begin
RzFileListBox1.Items.BeginUpdate;
RzFileListBox1.Items.Clear ;
FFileName:='*.*';
Directory:= APath + '';
if Directory[Length(Directory)]<>'\' then
Directory:=Directory+'\'; FindResult:=FindFirst(Directory+FFileName, faAnyFile, FSearchRec);
try
while FindResult=0 do
begin
RzFileListBox1.Items.Add(LowerCase(Directory+FSearchRec.Name));
FindResult:=FindNext(FSearchRec);
end;
FindResult:=FindFirst(Directory+FFileName, faDirectory, DSearchRec);
while FindResult=0 do
begin
if ((DSearchRec.Attr and faDirectory )=faDirectory) and not
IsDirNotation(DSearchRec.Name) then
FindFiles(Directory+DSearchRec.Name);
FindResult:=FindNext(DSearchRec);
end;
finally
FindClose(FSearchRec);
end;
end;
end;
procedure TForm7.RzShellTree1Change(Sender: TObject; Node: TTreeNode);
begin
pathname:=RzShellTree1.SelectedPathName;
try
FindFiles(pathname);
finally
Screen.Cursor:=crDefault;
end;
end;
var
FindResult:integer;
FFileName : string;
FSearchRec, DSearchRec: TSearchRec;
Function IsDirNotation(ADirName: string):Boolean;
begin
Result:=(ADirName='.') or (ADirName='..');
end;
begin
if APath<>'' then
begin
RzFileListBox1.Items.BeginUpdate;
RzFileListBox1.Items.Clear ;
FFileName:='*.*';
Directory:= APath + '';
if Directory[Length(Directory)]<>'\' then
Directory:=Directory+'\'; FindResult:=FindFirst(Directory+FFileName, faAnyFile, FSearchRec);
try
while FindResult=0 do
begin
RzFileListBox1.Items.Add(LowerCase(Directory+FSearchRec.Name));
FindResult:=FindNext(FSearchRec);
end;
FindResult:=FindFirst(Directory+FFileName, faDirectory, DSearchRec);
while FindResult=0 do
begin
if ((DSearchRec.Attr and faDirectory )=faDirectory) and not
IsDirNotation(DSearchRec.Name) then
FindFiles(Directory+DSearchRec.Name);
FindResult:=FindNext(DSearchRec);
end;
finally
FindClose(FSearchRec);
end;
end;
end;
procedure TForm7.RzShellTree1Change(Sender: TObject; Node: TTreeNode);
begin
pathname:=RzShellTree1.SelectedPathName;
try
FindFiles(pathname);
finally
Screen.Cursor:=crDefault;
end;
end;
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if not DirectoryExists(ShellTreeView1.SelectedFolder.PathName) then
begin
Exit;
end;
FileListBox1.Directory := ShellTreeView1.SelectedFolder.PathName;
end;
while FindResult=0 do
begin
if pos('.xls',lowercase(FSearchRec.Name))>0 then
RzFileListBox1.Items.Add(LowerCase(Directory+FSearchRec.Name));
FindResult:=FindNext(FSearchRec);
end;
你用ShellListView控件吧,直接关联ShellTreeView,在ShellListView的AddFolder事件中对AFolder.PathName进行判断,如果后缀是你要的,就CanAdd := True