unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure search(dir:string);//自定义函数Var
targetpath:string;
sr:TsearchRec;
begin
targetpath:=extractfilepath(dir);
if findfirst(dir,faanyfile,sr)=0 then
repeat
if (sr.Name<>'.')and(sr.Name<>'..')
and ((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)
then
form1.Memo1.Lines.Add(targetpath+sr.name); //在MEMO中添加找到的文件
until findnext(sr)<>0;
//以下一段内容我试了可以不要也能正常运行,这是我感到奇怪的地方,那为什么书还要加上这段内容呢,虽然加上它程序也没有问题 if findfirst(dir,faanyfile,sr)=0 then
repeat
if((sr.name<>'.')and (sr.name<>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)
then search(targetpath+sr.name+'\*.*');
until findnext(sr)<>0;end;procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Clear; //清除数据表MEMO字段内容
search(Edit1.Text);{调用Search()函数}
MessageDlg('文件搜索完毕!',mtInformation,[mbOk],0);{结束提示}
end;end.这段程序有几处看不懂的地方用下划线表示了,希望那位大侠给看看,指点指点
例外可否告诉我最后绿色部分函数的原型,我看help有些看不懂。先谢谢了。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure search(dir:string);//自定义函数Var
targetpath:string;
sr:TsearchRec;
begin
targetpath:=extractfilepath(dir);
if findfirst(dir,faanyfile,sr)=0 then
repeat
if (sr.Name<>'.')and(sr.Name<>'..')
and ((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)
then
form1.Memo1.Lines.Add(targetpath+sr.name); //在MEMO中添加找到的文件
until findnext(sr)<>0;
//以下一段内容我试了可以不要也能正常运行,这是我感到奇怪的地方,那为什么书还要加上这段内容呢,虽然加上它程序也没有问题 if findfirst(dir,faanyfile,sr)=0 then
repeat
if((sr.name<>'.')and (sr.name<>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)
then search(targetpath+sr.name+'\*.*');
until findnext(sr)<>0;end;procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Clear; //清除数据表MEMO字段内容
search(Edit1.Text);{调用Search()函数}
MessageDlg('文件搜索完毕!',mtInformation,[mbOk],0);{结束提示}
end;end.这段程序有几处看不懂的地方用下划线表示了,希望那位大侠给看看,指点指点
例外可否告诉我最后绿色部分函数的原型,我看help有些看不懂。先谢谢了。
解决方案 »
- DWORD,hwnd,THandle有什么区别
- 自己写的控件调用了DLL, 安装没问题, 卸载的时候Delphi每次都崩溃了, 为什么?
- 彻底解决TreeView控件状态图标问题
- 再帮忙一下,SQL语句
- 如何把數據庫中查詢得到的表導入到excel生成報表?
- 关于工程单元问题
- 非常奇怪的问题,关于Control has no parent window,具体看内容
- 《江湖告急》 高手请进:websnap开发的一个小问题。(在线等待。。。。。)
- 一个一般问题!!
- dxDBGrid中如何定义下拉列表框?
- fastreport 3 MEMO代码转 fastreport 4
- rpl70.bpl有什么作用
还有filegetattr中的sr是之前搜索到的第一个文件的名字,即然它已经代表名字,为什么要用.Name而不直接用sr呢?下面那段嵌套,我试了试,不要,也可以实现找某个路径下的所有文件,为什么它书上偏要写上这段内容呢??搞不懂我在帮助的搜索和索引里都试着搜过MesageDlg,可是出来的不是我想要的内容,看来这个帮助我还不大会用哦,麻烦这位好心的大侠再帮帮忙,解答解答吧
if findfirst(dir,faanyfile,sr)=0 then
repeat
if((sr.name <>'.')and (sr.name <>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory) <>fadirectory)
then search(targetpath+sr.name+'\*.*');
until findnext(sr) <>0;
这段代码写错了,应该是:
if((sr.name <>'.')and (sr.name <>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory) =fadirectory)
then search(targetpath+sr.name+'\*.*');
判断是否是文件夹,然后递归调用此函数,用于搜索子文件夹,直到没有文件夹为止。前段是搜索文件。
if((sr.name <>'.')and (sr.name <>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory) <>fadirectory)
then
是不是应该是
if((sr.name <>'.')and (sr.name <>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory) =fadirectory)
then
这样的话就是在搜索子目录,你搜索的地方没有子目录,所以结果会一致
repeat
if (sr.Name <>'.')and(sr.Name <>'..') //排除本级目录和上级目录
and ((filegetattr(targetpath+sr.name)and fadirectory) <>fadirectory) //排除目录文件夹(怎么感觉和本级目录相似呵?)
then form1.Memo1.Lines.Add(targetpath+sr.name); //在MEMO中添加找到的文件
until findnext(sr) <>0; //直到此路径的所有文件都显示完毕
{利用递归,找出路径下的所有文件夹的所有文件}
if findfirst(dir,faanyfile,sr)=0 then
repeat
if((sr.name <>'.')and (sr.name <>'..'))
and ((filegetattr(targetpath+sr.name)and fadirectory) =fadirectory)
then search(targetpath+sr.name+'\*.*');
until findnext(sr) <>0; [color=#FF9900]并且是先显示输入路径的下的所有文件,然后再显示此路径下文件夹的文件。[/color]
大致情况就是这样的。对吧