我在硬盘中查找一个文件,不知道在哪个分区中  
  用什么函数可以返回路径的  
  比如:我查找一个gj.exe  
  后结果返回c:\gj\  
   
   
  相当于windows的搜索,返回要找文件的路径(是整个硬盘的搜索)  
  大家有函数或自己些过的,可否给小弟一个参考?》急啊!!!  

解决方案 »

  1.   

    我记得有个API叫 findfile..什么的, 可以用来搜索文件的.
      

  2.   

    那函数叫
    查找目录中是否存在某一文件
    function FileSearch(const Name, DirList: string): string;
    具体用法,请查看相关帮助. 输入这函数名字,delphi会有提示的吧
      

  3.   

    还有这个和FileSearch差不多,
       function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
    你要的结果好像只能遍历去了!一个函数可搞不定。
      

  4.   

    用递归调用啊先用FindFirst寻找第一个文件,再用FindNext寻找下一个文件,如果是目录那么就递归.
    这些不应该问,随便来来就会了
      

  5.   

    function TFrmMain.FindFiles(APath: string): Integer;
    var
      SearchRec:TSearchRec;
      FileAttrs: Integer;
      FileDriverDateTime,FileSaveDateTime:String;
      TempFile:String;
    begin
      Result:=0;
      FileAttrs:=faAnyFile;
      If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then
      begin
        try
          If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
          begin
            If SearchRec.Attr = faDirectory then  //目录继续搜索,递归
               ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name)
            Else begin                             //是文件则进行转发
               try
                 ReSult:=ReSult+1;
                 TempFile:=APath+'\'+SearchRec.Name;
                 Memo1.Lines.Add(TempFile);
                 FileDriverDateTime:=GetFileDriverDateTime(TempFile);
                 FileSaveDateTime:=GetFileSaveDateTime(TempFile);
                 If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then
                    ;
                    DeleteFile(TempFile);
               finally
               end;
            end;
          end;
          While FindNext(SearchRec)=0 do
          begin
            If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
            begin
              If SearchRec.Attr = faDirectory then //目录继续搜索,递归
                ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name)
            Else begin                             //是文件则进行转发
               try
                 ReSult:=ReSult+1;
                 TempFile:=APath+'\'+SearchRec.Name;
                 Memo1.Lines.Add(TempFile);
                 FileDriverDateTime:=GetFileDriverDateTime(TempFile);
                 FileSaveDateTime:=GetFileSaveDateTime(TempFile);
                 If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then
                    ;
                    DeleteFile(TempFile);
               finally
               end;
            end;
            end;
          end;
        finally
          FindClose(SearchRec);
        end;
      end;
    end;
    把我的代码去掉就是了。
      

  6.   

    不推荐Delphi自己那个FindFirst
    推荐Win32API的
    FindFirstFile
    FindNextFile
    支持64位文件大小的(LargeInteger)
      

  7.   

    谢谢各位了.问题已经解决了.用的是以下方法:procedure TfDug_findfile.FindFiles(APath, AFile: string;  FileList: Tstrings);
    var
     FindResult: integer;
     FSearchRec, DSearchRec: TSearchRec;
     function IsDirNotation(ADirName: string): Boolean;
     begin
       Result := ((ADirName = '.') or (ADirName = '..'));
     end;
    begin
     if APath[Length(APath)] <> '\' then
       APath := APath + '\';
     FindResult := FindFirst(APath + AFile, faAnyFile +
                             faHidden +faSysFile + faReadOnly,
                             FSearchRec); //在根目录中查找指定文件
     try
       while FindResult = 0 do
       begin
         FileList.Add(APath + FSearchRec.Name);
         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函数
           FindFiles(APath + DSearchRec.Name, AFile,FileList);
         FindResult := FindNext(DSearchRec);
       end; finally
       FindClose(FSearchRec);
     end;end;