请问如何遍历所有可用硬盘,并且搜索所有文件夹找出文件,只要求找到一个符合的就停止!然后在找另一个文件!

解决方案 »

  1.   

    用Delphi自带的FindFirst, FindNext, FindClose系统列函数可实行。
      

  2.   

    function TFrmmain.getdirectoryname(dir:string):string;
    {对文件名进行转换,使之以反斜杠结尾}
    begin
    if dir[length(dir)]<>'\' then
    result:=dir+'\'
    else
    result:=dir;
    end;function isdirnotation(adirname:string):boolean;
    begin
    result:=(adirname='.') or (adirname='..');
    end;procedure TFrmmain.findfiles(apath: string);
    {通过递归调用,可以在当前目录和子目录下查找指定格式的文件}
    var
    fsearchrec,dsearchrec:tsearchrec;
    findresult,findresult1:integer;
    begin
    apath:=getdirectoryname(apath); //获取一个有效的目录名称
    {查找一个匹配的文件}
    findresult:=findfirst(apath+ffilename,faAnyFile+fahidden+fasysfile,fsearchrec);
    try
    //继续查找匹配的文件
    if findresult=0 then
    begin
    Listbox1.Items.Add(lowercase(apath+fsearchrec.Name));
    t:=t+1;
    label1.Caption:=inttostr(t);
    //findresult:=findnext(fsearchrec);
    end;//在当前目录的子目录中进行查找
    findresult:=findfirst(apath+'*.*',fadirectory,dsearchrec);
    while findresult=0 do
    begin
    if ((dsearchrec.Attr and fadirectory)=fadirectory) and not
    isdirnotation(dsearchrec.Name) then
    findfiles(apath+dsearchrec.Name);//在此处是递归调用
    findresult:=findnext(dsearchrec);
    end;finally
    findclose(fsearchrec);
    end;
    end;procedure TFrmmain.Button1Click(Sender: TObject);
    {调用FindFiles()函数,用来搜索子目录}
    begin
    t:=0;
    screen.Cursor:=crhourglass;
    try
    Listbox1.Items.Clear;
    ffilename:=Edit1.Text;
    findfiles(DirectoryListBox1.Directory);
    finally
    screen.Cursor:=crdefault;
    end;
    end;这次我的代码,到底问题处在哪里!