Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi FTP via Indy (https://www.delphipraxis.net/155051-ftp-via-indy.html)

tferl 6. Okt 2010 12:55

FTP via Indy
 
Hallo Zusammen,

eigentlich ist es ja recht einfach via FTP einen Download zu realisieren.
Aber nach der Umstellung auf Delphi2010 hab ich einige Probleme.

Den angehängten (vereinfachten) Code benutze ich, um eine Reihe von Exceldateien regelmäßig von einem FTP-Server abzuholen.
In einer global verfügbaren Struktur mit dem Namen "Ini" sind alle benötigten Informationen korrekt enthalten.
Die Klasse FTP wurde als Komponente ins Formular gezogen.
Der Transfertyp steht auf ftBinary - ich hab's beim Debuggen überprüft.

Nach Abarbeitung der Funktion sind die Excel-Dateien zwar auf der lokalen Maschine, jedoch sind diese nicht mehr lesbar.
Durch den Transport werden alle Dateien (egal ob Excel oder sonstwas) zerstört.

Ein Download mittels Explorer funktioniert und liefert auch korrekte Dateien.....

Hat irgendjemand eine Idee, was ich hier falsch mache.

Ich benutze Delphi2010 Enterprise mit den Indy-Komponenten im Original-Auslieferungszustand.


Function Download:Boolean;
Var
FList :TStringList;
i :Integer;
Source,
Dest : String;

begin

FTP.Host := ini.FTPHost;
FTP.Username := ini.FTPSer;
FTP.Password := ini.FTP_Password;
FTP.Transfertype := ftBinary;

Try
FTP.Connect;
Except
EXIT;
end;

// Versuche ins Quellverzeichnis zu wechseln .....
Try
FTP.ChangeDir(ini.FTP_SourceDir);
Except
EXIT;
end;

Application.ProcessMessages;

// lesen des Verzeicnisinhaltes
FList := TStringList.Create;

FTP.List(FList,'',FALSE);

// alle Dateien durchlaufen und XLS-Files via FTP.Get() abholen
For i:=0 to FList.Count-1 do
Begin

Source := FList[i];

If Pos('.XLS',Uppercase(Source)) > 0 Then
Begin

Dest := Ini.LocalDir + Source;

Try
FTP.Get(Source , Dest , True);
Except
//....
End;
End

End;

FList.Free;

end;

youuu 6. Okt 2010 13:21

AW: FTP via Indy
 
Kannst du bitte Delphi-Tags verwenden mit einer korrekten Formatierung, so tut das lesen in den Augen weh :)

tferl 6. Okt 2010 15:17

AW: FTP via Indy
 
bin ein Forumsgreenhorn - Was ist ein Delphi-Tag ???? - sorry - ich hab bisher noch keine Sourcen gepostet ;-)

plusplus 7. Okt 2010 10:03

AW: FTP via Indy
 
Dein FTP Root ist moeglicherweise nicht richtig. Connect und sie erstmal in welcher directory du bist, danach change dein dir, und danach gebe nur den file name als SourceFile und Path+File als DestFile.

Indy FTP nimmt den path von dem system als root path, nicht den von dem user. darum must erst schauen wo du bist.

PS: The List format bringt nicht den file name sauber. du must es sauber machen. wenn ich mich richting erinnere the list function bringt was wie filename.xls | file | -rxrxxrx.


Hope this helps.

GHorn 7. Okt 2010 10:43

AW: FTP via Indy
 
Schau mal in die Hilfe:

Delphi-Quellcode:
procedure Get(
    const ASourceFile: string,
    ADest: TIdStream,
    AResume: Boolean = false
); overload;
"Dest" muss ein Stream sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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