![]() |
(Indy) IdFTP: Prüfen ob ein Verzeichnis existiert
Hallo liebe Leute,
da schon häufiger gefragt wurde wie ich über die Indykomponente IdFTP abfrage ob ein Verzeichnis existiert habe ich folgende Funktion geschrieben:
Delphi-Quellcode:
Wichtig ist, dass das Verzeichnis das ihr durchsuchen wollt mit einem '/' beginnt und,
function ftpDirExists(ftp:TIdFTP; dir:String; fromRoot:boolean):boolean;
var tempDir : String; tempDir2 : String; tempDir3 : String; extractedDirs : TStringList; tempList : TStringList; i : integer; begin result := false; // connected? if not ftp.Connected then exit; if dir[length(dir)] <> '/' then dir := dir + '/'; // Initialize objects extractedDirs := TStringList.Create; tempList := TStringList.Create; // Store current dir tempDir := ftp.RetrieveCurrentDir; // go to the main dir if necessary if fromRoot then ftp.ChangeDir('/'); tempDir3 := ftp.RetrieveCurrentDir; // extract all single directories in the dir path for i := 1 to length(dir) do begin if dir[i] = '/' then begin if tempDir2 <> '' then begin extractedDirs.Add(tempDir2); tempDir2 := ''; end; end else tempDir2 := tempDir2 + dir[i]; end; // Get List for each depth and check if dir exists for i := 0 to extractedDirs.Count-1 do begin tempList.Clear; ftp.List(tempList,'*',false); if tempList.IndexOf(extractedDirs.Strings[i]) = -1 then begin result := false; exit; end else begin tempDir3 := tempDir3 + extractedDirs.Strings[i]+'/'; ftp.ChangeDir(tempDir3); end; end; //Clear objects extractedDirs.Free; tempList.Free; ftp.ChangeDir(tempDir); result := true; end; dass eine Verbindung zum FTP-Server besteht. Ein Beispielaufruf würde so aussehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin IdFTP1.Username := 'padmalcom'; IdFTP1.Password := 'blubb'; IdFTP1.Host := 'www.myftp.de'; if not IdFTP1.Connected then IdFTP1.Connect; if ftpDirExists(idFTP1, '/Backup/ftp tool/', true) then showmessage('true') else showmessage('false'); end; |
Re: (Indy) IdFTP: Prüfen ob ein Verzeichnis existiert
kleine doofe Frage: also die FTP-Verzeichnisse werden ja alle mit einem "/" angesprochen. Bei dir sind da jetzt an dieser Stelle lauter "\". Ich finde, dass die Verzeichnisnamen durch ein "\" ziemlich komisch aussehen.
Bernhard |
Re: (Indy) IdFTP: Prüfen ob ein Verzeichnis existiert
Hast natürlich recht, habs geändert!
|
Re: (Indy) IdFTP: Prüfen ob ein Verzeichnis existiert
Geht das nicht einfacher?
Delphi-Quellcode:
function FTPDirExists(DirName : String; IdFTPComp : TIdFTP) : Boolean;
var DirList : TStringList; begin Result := False; DirList := TStringList.Create; try IdFTPComp.List(DirList, DirName, True); if DirList.Count > 0 then Result := True; finally DirList.Free; end; end; |
Re: (Indy) IdFTP: Prüfen ob ein Verzeichnis existiert
Ich sehe in Deinem Code zudem drei potentielle Probleme
Und noch was: Für neuere Delphi Versionen wäre so etwas eventuelle eine schöne Gelegenheit einen ![]() Viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz