同上

解决方案 »

  1.   

    用 FindFirst 和 FindNext 函数实现,可以看看 帮助中的例子。
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      sr: TSearchRec;
      ss: TStrings;
      dirName: string;
    begin
      dirName := 'c:\';
      ss := TStringList.Create;
      if FindFirst(dirName + '*.*', faDirectory, sr) = 0 then begin
        repeat
          if (sr.Attr and faDirectory) = sr.Attr then
            ss.Add(sr.Name);
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
      ShowMessage(IntToStr(ss.Count));
      ss.Free;
    end;
      

  3.   

    to  : sysu(死树) CloneCenter(复制中心)   outer2000(天外流星) 基本明白了 多谢
     再请问 sysu(死树)  (sr.Attr and faDirectory) = sr.Attr   这句怎么理解???
      

  4.   

    (sr.Attr and faDirectory) = sr.Attr 判断取到的是否是目录,即属性要为faDirectory
      

  5.   

    应该是这样解释的,不知道有没有解释错。(sr.Attr and faDirectory) = sr.Attr   表示查找出来的对象本身是一个目录!
      

  6.   

    作用我是明白地 
    sr.Attr and faDirectory
    Integer     $00000010 怎么来看呢?
      

  7.   

    //得到某一文件夹下所有文件列表的函数 /////////////////////////////////////
    // getFileListFromDir('c:\windows',false,fileList);
                                //c:\windows or c:      ture|false
    procedure getFileListFromDir(dir:string;includeSubDir:boolean;var fileList:TStringList);
    var
      sr:TSearchRec;
      path:String;
    begin
      path:=dir+'\';      //c:\windows\
      dir:=dir+'\*.*';    //c:\windows\*.*
      if findFirst(dir,faanyfile,sr)=0 then
      repeat
      begin
        if (sr.Name<>'.') and (sr.Name<>'..') and ((fileGetAttr(path+sr.Name) and faDirectory)<>faDirectory) then
          fileList.Add(path+sr.Name);
        if (includeSubDir) and (sr.Name<>'.') and (sr.Name<>'..') and ((fileGetAttr(path+sr.Name) and faDirectory)=faDirectory) then
          getFileListFromDir(path+sr.Name,includeSubDir,fileList);
      end;
      until findNext(sr)<>0;
      findClose(sr);
    end;
      

  8.   

    举个例子,
    如果sr.Attr = faArchive // $00000020
    则(sr.Attr and faDirecotry) = 0,所以取到的不是faDirectory,
    如果sr.Attr = faDirectory // $00000010
    则(sr.Attr and faDirecotry) = $00000010,所以取得的是faDirectory,
      

  9.   

    各位仁兄果然高明,一点意见:
    ............
    if (sr.Attr and faDirectory) = sr.Attr then
    ...........
    死树兄的这行代码判断出来的应该是非只读的文件夹,如果只是列出忽略只读属性的话,应改为:
    if (sr.Attr and (faDirectory + faReadOnly) ) = sr.Attr then
      

  10.   

    这是位操作,用 AND 目的是测试是否包含这种值,学习计算机基础的时候应该有所解释。
    1 AND x = x
    1 OR x = 1
    0 AND x = 0
    0 OR x = x
    一个文件有可能有几种属性,例如 faHidden = $00000002,faDirectory = $00000010,那么一个隐藏文件夹的属性就是 faHidden + faDirectory,也就是 $12 sr.Attr,这样使用 $12 AND faHidden(00010010 AND 00000010 = 00000010),就可以测试出是否包含了隐藏属性。
      

  11.   

    也就是说 与的时侯整数会转换为十六进制的表现型式了?(ps: 我明白
    1 AND x = x
    1 OR x = 1
    0 AND x = 0
    0 OR x = x的说