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:
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;
Wichtig ist, dass das Verzeichnis das ihr durchsuchen wollt mit einem '/' beginnt und,
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;