Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FTP.List fehler (https://www.delphipraxis.net/44381-ftp-list-fehler.html)

dioony 18. Apr 2005 18:11


FTP.List fehler
 
Mittag!

Ich bin schon seit 4 tagen dabei einen fehler zu finden, aber irgendwie komm ich da nicht weiter... hab schon alles mögliche ausprobiert und schon jedes forum durchforstet...

Hab folgendes prob:

Wenn ich mir den inhalt eines verzeichnisses mit
IdFTP1.List(ListBox2.Items,'*',FALSE);
ausgeben lasse, dann sollte nach der Referenz mir ja nur die Ordnernamen (durch das * als zweiten Parameter ) und ohne weitere details (durch das FALSE als dritten Parameter) ausgeben.
Das sieht dann so aus:

Ordner1
Ordner2
Ordner3
...

Dies macht er auch bei einem FTP Server aber bei einem anderem FTP Server gibt er
mir total was anderes wieder:

.
..
Ordner1\SubOrdner1
Ordner1\Datei1.txt
Ordner1\Datei2.txt
Ordner2\SubOrdner1
Ordner2\Datei1.txt
Ordner3\SubOrdner1
Ordner3\SubOrdner2
Ordner3\Datei1.txt
Ordner3\Datei2.txt

nun brauch ich aber nur die ordner namen...

Ist das ne einstellungssache am FTP? habe auch schon versucht das ganze manuell zu lösen aber da gibts dann auch nur probleme.... habe da mehrere wege versucht
z.b. so

Delphi-Quellcode:

IdFTP1.List(Form5.ListBox1.Items,'*',FALSE);
      Name:='';
      dummy:='';
      for g:=0 to Form5.ListBox1.Items.Count-1 do
      begin
          Name:=Copy(Form5.ListBox1.Items[g],1,Pos('\SubOrdner1',Form5.ListBox1.Items[g])-1);
          if Name <> dummy then
          begin
            dummy:=Name;
            Form5.ListBox2.Items.Add(Name);
          end;
      end;
ausgeführt wird dieser teil in Form1...
Fehlermeldung hierbei: EAccessViolation Zugriffsverletzung bei Adresse 004B8494 in Modul Project1...




Ich benutze delphi 6 enterprise und Indy 8.0.25

Laut referenz sollte das ja mit TIdFTP.list so gehen wie ich es oben mache:


procedure List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean);

ASpecifier is a String that contains a mask indicating the files and/or directories to be included in the listing. ASpecifier can contain common wildcard characters like '*' and '?'. Some useful masks include:

*.* - All files in the current directory.
* - All directory entries in the current directory.
*. - All files regardless of extension in the current directory.
A??.txt - All text files that have a 3-character name starting with 'A'.


Hab schon überlegt indy zuupdaten, da ich bei meiner fehlersuche auf TIdFTP.directorylisting gestoßen bin. das gibts wohl aber noch nicht in Indy 8.0.25, denn in der referenz steht nichts und wenn ich die methode benutzen will ist sie unbekannt. also kann ich nur noch updaten, aber ich bin mir da nicht ganz sicher, ob dann noch die ganzen anderen sachen funktionieren, da sie ja auf indy 8.0.25 geschrieben wurden! Hat da jemand ahnung?

Hoffe jemand hat da mal ne idee und danke im voraus!

Dioony

marabu 19. Apr 2005 11:45

Re: FTP.List fehler
 
Vielleicht hilft dir das weiter:
Delphi-Quellcode:
uses
  IDFtpList;

var
  l: TIdFtpListItems;
  i: integer;
  sl: TStringList;
begin
  sl := TStringList.Create;          // create raw data container
  FTPClient.Connect(true, -1);       // login
  FTPClient.List(sl, '*', true);     // get all entries with details
  l := FTPClient.DirectoryListing;   // get ref of parsed entries
  for i := l.Count - 1 downto 0 do   // start on safe side
    if l[i].ItemType = ditDirectory  // check for sub directories
      then sl[i] := l[i].FileName    // keep dir entries
      else sl.Delete(i);             // drop other entries
  FTPClient.Disconnect;              // logout
  ListBox.Items.Assign(sl);          // show directory names
  sl.Free;                           // drop raw data container
end;
Mit D7 Enterprise / Indy9 gemacht. DirectoryListing wird nur gefüllt, wenn du Details anforderst und dadurch der Parser getriggert wird. Wenn die Property in Indy8 noch fehlen sollte, dann kannst du auch selbst parsen. Ist nicht so schwer.

Grüße vom marabu

dioony 20. Apr 2005 12:49

Re: FTP.List fehler
 
danke erstmal!

Werde es mal austesten! hab jetzt allerdings von indy 8 auf indy 10 geupdated... Hoffe, dass ich das jetzt mal hinbekomme!

Werde mein hoffentlich erfolgreiches ergebnis posten!

cya
Dioony

japetos 21. Sep 2005 15:52

Re: FTP.List fehler
 
@diooney

Hat das jetzt geklappt?
wenn ja, wie hast Du es gemacht?

:?

XzenTorXz 19. Aug 2006 04:04

Re: FTP.List fehler
 
Ich hab das selbe Problem. Bei:
Delphi-Quellcode:
List(sl, '*', true)
funktioniert es! (EDIT: d.h. es funktioniert nicht richtig, es werden auch alle dateien angezeigt, aber damit könnte ich leben wenn nicht die ganzen anderen informationen gesendet werden würden)
aber:
Delphi-Quellcode:
List(sl, '*', false)
funktioniert nicht, da zeigt er bei mir nur dateien an.
Hat da jemand eine Idee? oder weiss jemand ob man irgendwie einfach überprüfen kann ob ein Ordner schon existiert ?
Ich benutze Delphi 7 enterprise und Indy 10(soweit die installation geklappt hat !?)

databoss 31. Aug 2006 18:12

Re: FTP.List fehler
 
Hi!

Zur Info: Bei geht das mit Indy 10 und D7 Ep auch nie...

Delphi-Quellcode:
var
  List : TStringList;
  FTPList: TIdFtpListItems;
begin
  List:=TStringList.Create;
  idFTP1.List(List,'',True);
  FTPList:= idFTP1.DirectoryListing;
end;
oder auch mit

Delphi-Quellcode:
idFTP1.List(List,'*',True);
FTPList.Count ist leider immer = 0

Nur List selber parsen klappt!

Florian

hsbc 31. Aug 2006 18:41

Re: FTP.List fehler
 
Hallo allerseits,

So hab's ich gemacht (mit Indy 10):

Delphi-Quellcode:
var s1, s2, s3, s4: string;
    c: integer;
    L: TIdFTPListItems;
    sl: TStringList;

  sl := TStringList.Create;
  try
    IdFTP1.List(sl);
    L := IdFTP1.DirectoryListing;
  finally
    for c := 0 to L.Count -1 do begin
      with L.Items[c] do begin
        s1 := FileName;
        s2 := IntToStr(Size);

        case L.Items[c].ItemType of            // Ord-Wert:
          ditDirectory:      it := 'DIR';     //    0
          ditFile    :      it := 'File';    //    1
          ditSymbolicLink:   it := 'SymbLk';  //    2
          ditSymbolicLinkDir: it := 'SymbLD';  //    3
          ditBlockDev:       it := 'BlkDev';  //    4
          ditCharDev:        it := 'ChrDev';  //    5
          ditFIFO:           it := 'FIFO';    //    6
          ditSocket:         it := 'Socket';  //    7
        end;
        s3 := DateToStr(ModifiedDate);
        s4 := PermissionDisplay;
      end;
    end;
  end;
  sl.free;

Funktioniert einwandfrei. Fertiges Produkt zu sehen unter: HS-Uploader im Bereich Software.

mfg
Herbert

berens 16. Mai 2007 11:30

Re: FTP.List fehler
 
Um anderen Suchenden zu helfen, falls es dennoch nicht klappt:

Lösung unter:
http://www.delphipraxis.net/internal...rectorylisting

Zitat:

TIdFTP by default registers directory listing parsers for only the NLST and MLST formats. If the FTP server is returning a format other than those, you need to include the correct unit with the correct parser in your implementation uses clause. Like:

uses IdFTPListParserWindowsNT;


Or, as an alternative, you can include the IdAllFTPListParsers unit to get them all in one swipe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.

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