怎么获取目录了下的所有文件,OpenDialog怎么只能选一个文件啊,我要选目录的那种控件,急,我怎么做啊

解决方案 »

  1.   

    可以用TDirectoryListBox这个控件啊,它的Directory属性就是你要的
    不过它不是那种对话框控件
      

  2.   

    // 把指定目录下的所有文件名放到TStringList里
    function SearchFiles(dir: string): TStringList;
    var
      find: TSearchRec;
      file1: PChar;
      fattr: integer;
      ff: integer;
    begin
      Result := TStringList.Create;
      file1 := PChar(dir + '\*.*');
      fattr := faReadOnly + faArchive;
      ff := FindFirst(file1, fattr, find);
      while ff = 0 do
      begin
        Result.Add(find.Name);
        ff := FindNext(find);
      end;
    end;
      

  3.   

    OpenDialog只能选一个文件.推薦TRzSelectFolderDialog
      

  4.   

    function FindFiles(APath:string):String;
    var
      SearchRec:TSearchRec;
      FileAttrs: Integer;
    begin
      Result:='';
      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
              Result:=Result+SearchRec.Name+#13#10;
          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
                Result:=Result+SearchRec.Name+#13#10;
            end;
          end;
        finally
          FindClose(SearchRec);
        end;
      end;
    end;
      

  5.   

    调用这个函数就可以选择目录了function SelectPath(const Title: string): string;
    var
      bi: TBrowseInfo;   //uses ShlObj
      IdList: PItemIDList;
    begin
      result := '';
      FillChar(bi, SizeOf(bi), 0);
      bi.hwndOwner := 0;
      bi.lpszTitle := PChar(Title);
      bi.ulFlags := BIF_RETURNONLYFSDIRS{ + BIF_DONTGOBELOWDOMAIN};
      IdList := SHBrowseForFolder(bi);
      if IdList<>nil then
      begin
        SetLength(result, 255);
        SHGetPathFromIDList(IdList, PChar(result));
        result := string(pchar(result));
        if result<>'' then
          if result[Length(result)] <>'\' then
            result := result + '\';
      end;
    end;
      

  6.   

    function FindFiles(APath:string):String;
    var
      SearchRec:TSearchRec;
      FileAttrs: Integer;
    begin
      Result:='';
      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
              Result:=Result+SearchRec.Name+#13#10;
          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
                Result:=Result+SearchRec.Name+#13#10;
            end;
          end;
        finally
          FindClose(SearchRec);
        end;
      end;
    end;
      

  7.   

    to fengqingwanzhong(风情万种
    不错,学习
      

  8.   

    OpenDialog可以选择多个文件啊,当然了你也可以像上面各位老大说的使用递归,但是我感觉你好像不是这个意思,递归就不给你写了,这里只是提一下OpenDialog选择多个文件
    设置OpenDialog的Option属性中的opAllowMultiSelect为True,之后用如下方法得到文件名
    procedure TForm1.btn1Click(Sender: TObject);
    var
    i:Integer;
    begin
        dlgOpen1.Execute;
        for i:=0 to dlgOpen1.Files.Count-1 do
            ShowMessage(dlgOpen1.Files[i]);
    end;
    不知道有用否
      

  9.   

    function SearchFiles(dir: string): TStringList;
    var
      find: TSearchRec;
      file1: PChar;
      fattr: integer;
      ff: integer;
    begin
      Result := TStringList.Create;
      file1 := PChar(dir + '\*.*');
      fattr := faReadOnly + faArchive;
      ff := FindFirst(file1, fattr, find);
      while ff = 0 do
      begin
        Result.Add(find.Name);
        ff := FindNext(find);
      end;
    end;
    可以
      

  10.   

    function SearchFiles(dir: string): TStringList;
    var
      find: TSearchRec;
      file1: PChar;
      fattr: integer;
      ff: integer;
    begin
      Result := TStringList.Create;
      file1 := PChar(dir + '\*.*');
      fattr := faReadOnly + faArchive;
      ff := FindFirst(file1, fattr, find);
      while ff = 0 do
      begin
        Result.Add(find.Name);
        ff := FindNext(find);
      end;
    end;
      

  11.   

    搜索整个目录及子目录下文件用以上楼主方法function FindFiles(APath:string):String;
    var
      SearchRec:TSearchRec;
      FileAttrs: Integer;
    begin
      Result:='';
      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
              Result:=Result+SearchRec.Name+#13#10;
          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
                Result:=Result+SearchRec.Name+#13#10;
            end;
          end;
        finally
          FindClose(SearchRec);
        end;
      end;
    end;