今天结贴,分数只给一个人!如何列出一个指定的文件夹下的所有子文件夹名。一.如何列出一个指定的文件夹下的所有子文件夹名,只列出文件夹名,不要列出
文件名(这个我有代码了)。我只要代码,能在D6中通过。二.请帮我解释一下这段代码的意思,并要说明什么时候等于零什么情况不等于零。
   if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  
注:如果没有答对我今天也一定结贴,答者有分。

解决方案 »

  1.   

    如果FindFirst成功返回0,或者返回错误码
      

  2.   


      TSearchRec sr;
      if (FindFirst("D:\\*", faDirectory, sr) == 0)
      {
          ShowMessage(sr.Name);
      } while (FindNext(sr) == 0);
      FindClose(sr);
      }
      

  3.   

    不好意思,上面用的是C++Builder的语法
    var
      sr:TSearchRec;
    begin
      if (FindFirst("D:\\*", faDirectory, sr) = 0) then
      begin
          ShowMessage(sr.Name);
          while (FindNext(sr) = 0)
               ShowMessage(sr.Name);
      end;
      FindClose(sr);
    end;
      

  4.   

    procedure FindDirUnder(strDir: string; IncludeSelf: boolean; var DirList: TStringList);
      // 得到StrDir目录下的子目录以DirList返回
    procedure FindFileUnder(strDir, ExtName: string; var FileList: TStringList);
      // 得到StrDir目录下的所有以ExtFile('.pas')为扩展名的文件 以FileList返回procedure FindDirUnder(strDir: string; IncludeSelf: boolean; var DirList: TStringList);
    var
      SRec: TSearchRec;
      retval: Integer;
    begin
      DirList.Clear;
      retval := FindFirst(strDir+'\*.*',faDirectory,sRec);
      try
        while retval = 0 do
        begin
          if (SRec.Attr and faDirectory) <> 0 then
            if (Srec.Name = '.') or (Srec.Name = '..') then
            begin
              if IncludeSelf then
                DirList.Add(Srec.Name)
            end else
              DirList.Add(Srec.Name);
          retval := FindNext(SRec);
        end;
      finally
        FindClose(SRec);
      end;
    end;procedure FindFileUnder(strDir,ExtName:string;var FileList:TStringList);
    var
      SRec: TSearchRec;
      retval: Integer;
    begin
      FileList.Clear;
      retval := FindFirst(strDir+'\'+ExtName,faAnyFile,sRec);
      try
        while retval = 0 do
        begin
          if (SRec.Attr and faDirectory) = 0 then
            FileList.Add(Srec.Name);
          retval := FindNext(SRec);
        end;
      finally
        FindClose(SRec);
      end;
    end;
      

  5.   

    通过下面的函数,可以方便地对文件名进行操作:
    1. ExpandFileName
    将当前驱动器名(盘符)、路径名和指定的文件名合成一个绝对文件名。
    函数原型如下:
    function ExpandFileName(const FileName: string): string;
    返回值为合成的绝对文件名。
    可用ExpandFileName()返回含路径及文件名的完整字符串信息,再用
    ExtractFilePath()返回路径信息。
    例:myfilename:=expandfilename('UEDIT32.EXE');
        myfilepath:=extractfilepath(myfilename);
    2. ExpandUNCFileName
    获取一个以U N C 格式的包括网络驱动器名的绝对文件名。
    函数原型如下:
    function ExpandUNCFileName(const FileName: string): string;
    3. ExtractFileDir
    从绝对文件名中获取目录名。
    函数原型如下:
    function ExtractFileDir(const FileName: string): string;
    4. ExtractFileDrive
    从绝对文件名中获取驱动器号(盘号)。
    函数原型如下:
    function ExtractFileDrive(const FileName: string): string;
    5. ExtractFileExt
    从绝对文件名中获取文件名的扩展名。
    函数原型如下:
    function ExtractFileExt(const FileName: string): string;
    6. ExtractFileName
    从绝对文件名中获取文件名。
    函数原型如下:
    function ExtractFileName(const FileName: string): string;
    7. ExtractFilePath
    从绝对文件名中获取路径名。
    函数原型如下:
    function ExtractFilePath(const FileName: string): string;
    8. ExtractRelativePath
    从绝对文件名中获取相对于某一个路径的相对路径名。
    函数原型如下:
    function ExtractRelativePath(const BaseName, DestName: string): string;
    9. ExtractShortPathName
    将长文件名转化成短文件名。
    函数原型如下:
    function ExtractShortPathName(const FileName: string): string下面是我的个人所得税里面取得程序路径并把计算过程和结果存入当前路径的一个过程的
    源码。你可以看看。
    S:=DateToStr(Date);//取得程序运行的日期
        S:=S+'.txt';
        //GetDir(0,Path); //取得程序的路径
        Path:=ExTractFilePath(Application.exename);//取得程序运行的路径含"\"
        //Path:=Application.ExeName;//付值路径
        S:=Path+S; //确定文件名(如C:\windows\200153.txt)
        AssignFile(f,S); //关联文件    If Not FileExists(S) then  //判断文件是否存在
           begin
             Rewrite(f);
             //if Fgfh='Dh' then
                //application.MessageBox('使用逗号分割','提示',64)         if Fgfh='Fh' then
                // application.MessageBox('使用分号分割','提示',64)
                WriteLn(f,'姓名'+';'+'级别'+';'+'工龄'+';'+'赔缴'+';'
                     +'所得额'+';'
                     +'调增项目'+';'+'调增额'+';'+'扣除项目'
                     + ';'+'扣除额'+';'
                     +'应税所得额'+';'+'税率'+';'+'速算扣除数'+';'
                     +'个人所得税')
             else if Fgfh='Th' then
                //application.MessageBox('使用特殊符号(&)分割','提示',64)
                 WriteLn(f,'姓名'+'&'+'级别'+'&'+'工龄'+'&'+'赔缴'+'&'
                     +'所得额'+'&'
                     +'调增项目'+'&'+'调增额'+'&'+'扣除项目'
                     + '&'+'扣除额'+'&'
                     +'应税所得额'+'&' +'税率'+'&'+'速算扣除数'+'&'
                     +'个人所得税')
             else
                //application.MessageBox('使用逗号分割','提示',64);             WriteLn(f,'姓名'+','+'级别'+','+'工龄'+','+'赔缴'+','
                     +'所得额'+','
                     +'调增项目'+','+'调增额'+','+'扣除项目'
                     + ','+'扣除额'+','
                     +'应税所得额'+','+'税率'+','+'速算扣除数'+','
                     +'个人所得税');
                     
             CloseFile(f); //关闭文件
           end;
      

  6.   

    现在结贴
    谢谢你们给我回答,分数我只能给我认为是正解的wisenowa(127.0.0.1)