Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Idftp nur Ordner auflisten (https://www.delphipraxis.net/180730-idftp-nur-ordner-auflisten.html)

gee21 12. Jun 2014 23:21

Idftp nur Ordner auflisten
 
Hallo

Ich nutze folgende Zeile um alle Dateien (ink. Ordner) aufzulisten

Delphi-Quellcode:
    IdFTP1.List();
   for I := 0 to IdFtp1.DirectoryListing.Count - 1 do
 ListBox2.Items.Add(IdFtp1.DirectoryListing.Items[I].FileName);


Jetzt wollte ich das so abändern dass nur Ordner angezeigt werden. Also habe ich folgendes versucht.

Delphi-Quellcode:
   IdFTP1.List();
   for I := 0 to IdFtp1.DirectoryListing.Count - 1 do


 if IdFtp1.DirectoryListing.Items[I].FileName[Length(IdFtp1.DirectoryListing.Items[I].FileName[i])-2]='.' =false then ListBox2.Items.Add(IdFtp1.DirectoryListing.Items[I].FileName);

Aber leider kommen immer noch alle Dateien / Ordner in die Listbox. Weiss jemand was ich falsch mache?

Sir Rufo 13. Jun 2014 02:29

AW: Idftp nur Ordner auflisten
 
Schau doch einfach mal nach, was diese DirectoryListing-Items ausser Filename noch so anbieten.
Evtl. waren die Indy-Leute ja schlau und haben noch ein paar mehr Informationen reingepackt.

gee21 13. Jun 2014 09:16

AW: Idftp nur Ordner auflisten
 
:-/ Vermutlich waren die schon schlau :-)

Also wenn du Data meinst
Delphi-Quellcode:
IdFtp1.DirectoryListing.Items[I].Data
Müsste ich da ja noch irgendwie den Namen raus filtern.


Und ansonsten habe ich noch versucht mit
Delphi-Quellcode:
idftp1.DirectoryListing.Items[i].ItemType=(ditDirectory)

Weis aber einerseits nicht genau was das macht und andererseits schreibe ich es anscheinend auch falsch.
Code:
[DCC Error] TabbedTemplate.pas(258): E2003 Undeclared identifier: 'ditDirectory'

Oder suche ich noch bei den falschen Punkten?

mkinzler 13. Jun 2014 09:28

AW: Idftp nur Ordner auflisten
 
Hast Du IdFTPList eingebunden?

Delphi-Quellcode:
idftp1.DirectoryListing.Items[i].ItemType=IdFTPList.ditDirectory;

himitsu 13. Jun 2014 09:32

AW: Idftp nur Ordner auflisten
 
Jupp, wenn der Compiler es nicht findet, dann gibt es zwei Möglichkeiten:

- die Unit ist nicht eingebunden
- es befindet sich in einem anderem Scope/Namespace

Letzteres tritt bei Enums z.B. auf, wenn {$SCOPEDENUM} aktiv ist und man dann auch den Typenbezeichner mit angeben muß.

gee21 13. Jun 2014 09:57

AW: Idftp nur Ordner auflisten
 
Achsoooooo.:evil: Danke euch allen.:thumb:

Dachte list sei schon mit der idftp Komponente dabei... Jetzt geht's :-D

zeras 12. Nov 2021 19:29

Idftp nur Ordner auflisten funktioniert nicht
 
Ich benutze folgende Funktion, um auf dem FTP Sever Verzeichnisse auszulesen.
Das funktioniert unter 10.4, aber nicht mehr unter 11.
Weiß jemand, ob sich bei Indy etwas geändert hat?

Delphi-Quellcode:
Function FTPDirExists(var DirName: String; IdFTPComp: TIdFTP): Boolean;
var
  itm: TIdFTPListItems;
  i : integer;

begin
  Result := False;

  IdFTPComp.List;
  itm := IdFTPComp.DirectoryListing;
  for i := 0 to itm.count -1 do begin
    if itm.Items[i].ItemType = ditDirectory then begin
      if itm.Items[i].Filename <> '.' then begin
        if itm.Items[i].Filename <> '..' then begin
          if UpperCase(itm.Items[i].Filename) = UpperCase(DirName) then begin

            //da FTP Server Groß/Kleinschreibung unterscheiden,
            //machen wir den Test alles mit Großschreibung und geben gegebenenfalls den
            //korrekten Pfad trotzdem zurück
            DirName := itm.Items[i].Filename;
            Result := True;
            Exit;
          end;
        end;
      end;
    end
  end;
end;
Es kommt immer TimeOut nach der eingestellten Zeit, siehe unten weiteres Beispiel.
Soweit wie mir bekannt ist, ist das ein ServU auf der anderen Seite.

Delphi-Quellcode:
var
  list_directories: TStringList;
  i : integer;
begin

  //nun versuchen, sich beim FTP Server einzuloggen
  IdFTP1.Host := 'xxx.de';
  IdFTP1.Username := 'username';
  IdFTP1.Password := 'Password';


    if not IdFTP1.Connected then IdFTP1.Connect;
    if not IdFTP1.Connected then begin
      ShowMessage(Format('FTP Server not connected! Cancel', []));
    end;
    i := IdFTP1.Greeting.Text.Count;
    ShowMessage(IdFTP1.Greeting.Text[0]);
    list_directories := TStringList.create;
    idftp1.List(list_directories, '', true);  >>>>>>>>>>>>>>> hier immer TimeOut
    for i := list_directories.Count - 1 downto 0 do begin
      ShowMessage(list_directories[i]);
    end;

mjustin 13. Nov 2021 07:31

AW: Idftp nur Ordner auflisten funktioniert nicht
 
Zitat:

Zitat von zeras (Beitrag 1497486)
Ich benutze folgende Funktion, um auf dem FTP Sever Verzeichnisse auszulesen.
Das funktioniert unter 10.4, aber nicht mehr unter 11.
Weiß jemand, ob sich bei Indy etwas geändert hat?

Um das zu prüfen wäre es möglich, die Indy Sourcen aus Delphi 10.4 im Delphi 11 Projekt einzubinden.

Oder die aktuelle Indy Version downloaden und es damit in beiden versuchen. Wenn es dann in Delphi 11 noch nicht funktioniert, ist es vermutlich ein Bug in Delphi 11.

zeras 13. Nov 2021 08:01

AW: Idftp nur Ordner auflisten funktioniert nicht
 
Zitat:

Zitat von mjustin (Beitrag 1497494)

Oder die aktuelle Indy Version downloaden und es damit in beiden versuchen. Wenn es dann in Delphi 11 noch nicht funktioniert, ist es vermutlich ein Bug in Delphi 11.

Wo gibt es denn die aktuellste Version?

mjustin 13. Nov 2021 08:30

AW: Idftp nur Ordner auflisten funktioniert nicht
 
Zitat:

Zitat von zeras (Beitrag 1497495)
Zitat:

Zitat von mjustin (Beitrag 1497494)

Oder die aktuelle Indy Version downloaden und es damit in beiden versuchen. Wenn es dann in Delphi 11 noch nicht funktioniert, ist es vermutlich ein Bug in Delphi 11.

Wo gibt es denn die aktuellste Version?

Unter
https://github.com/IndySockets/Indy

gibt es ein Zip Archiv mit der aktuellen Version.

Im Projekt muss dann nur der Suchpfad um die Verzeichnisse Lib/Core, Protocols und System erweitert werden.

Dadurch ist keine Package-Installation notwendig.

P.s. Wie steht die Property Passive der TIdFtp Komponente, auf True oder False?

Möglicherweise ist es dieser Fehler:
https://github.com/IndySockets/Indy/issues/377

Darin wird als Workaround genannt, Passive auf True zu setzen.
Es ist aber noch unklar, warum erst ab Delphi 11 ein Timeout kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz