Einzelnen Beitrag anzeigen

hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#3

Re: Rekursiver Aufruf von FTPFindFirstFile

  Alt 5. Jun 2008, 19:43
Hier der entsprechende Quellcode:

Delphi-Quellcode:
procedure TForm1.FindFilesTree(aTree: tTreeView; aPath: string; aNode: tTreeNode; aWithFiles: boolean);
var
  NodeTmp: tTreeNode;
  Info: pNodeInfo;
  hSearch: HINTERNET;
  findData: WIN32_FIND_DATA;
begin
  aTree.Items.BeginUpdate;

  if aPath = 'then aPath := '/';
  if aPath[Length(aPath)] <> '/then aPath := aPath + '/';

  if FTPSetCurrentDirectory(hConnect, PChar(aPath)) then begin
    hSearch := FTPFindFirstFile(hConnect, nil, findData, INTERNET_FLAG_DONT_CACHE, 0);
    if hSearch = nil then
    begin
      ; // Fehler
    end
    else begin
      repeat
        if findData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
        begin // Eintrag = Verzeichnis
          if (findData.cFileName[1] <> '.') then
          begin
            New(Info);
            Info^.Path := true;
            Info^.Name := aPath + findData.cFileName;
            // zum aktuellen Eintrag hinzufügen
            aNode := aTree.Items.AddChildObject(aNode, findData.cFileName, Info);
          end;

          // Knoten merken
          NodeTmp := aNode.Parent;
          // rekursiver Aufruf
          FindFilesTree(aTree, aPath+findData.cFileName, aNode, aWithFiles);
          // Gemerkten Knoten lesen
          aNode := NodeTmp;
        end
        else begin // Eintrag = Datei
          if aWithFiles then
          begin
            ;
          end;
        end;
      until not InternetFindNextFile(hSearch, @findData);
      InternetCloseHandle(hSearch);
    end;
  end;

  aTree.Items.EndUpdate;
end;
Wie gesagt, die erste Verzeichnisebene wird richtig in den Tree geschrieben. Der rekursive Aufruf gibt bei hSearch nil zurück.

mfg
Herbert
  Mit Zitat antworten Zitat