![]() |
ftpgetfile();
Hi Leute;
in der CodeLib ist ein ganz netter Code für den Datei Up- und Download ( ![]() Könnte mir jemand netter weise die Funktion getfile() schreiben, da ich mich leider nicht mit den Parametern auskenne. Also qausie das hier:
Delphi-Quellcode:
nur für GET statt für put (inkl. Beispielaufruf bitte)
uses
WinInet function putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; Wäre übrigens auch ne Gute Idee das dann inner CodeLib zu ergänzen :D; Danke! |
Re: ftpgetfile();
So das ganze Rätels hat sich jetz - mit Eurer indirekten Hilfe - gelöst.
An Hand dieses ![]()
Delphi-Quellcode:
Beispielaufruf:
function getfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end;
Delphi-Quellcode:
Dieser Post dient nur dem Zweck, den Leuten eine Lösung vorzuschlagen, die später nocheinmal mein Problem haben werden...
getfile('http://....de', 'servername', 'serverpasswort', '/test.txt', 'C:\test.txt');
|
Re: ftpgetfile();
Heidiho!
Es wird doch in der Code-Lib erklärt das er GetFile-Befehl gleich funktioniert. Die einzigen Unterschiede der Funktionen bestehen ja auch in der 1. und 9. Zeile in denen ein "put" gegen ein "get" getauscht wird. Allerdings könnte man das bestimmt deutlicher formulieren.. Grüße |
AW: Re: ftpgetfile();
Zitat:
durchstöbert, findet man immer das Beispiel mit dem InternetReadFile etc. Aber mit FtpGetFile nichts! Bei mir hat auch nur die InternetReadFile Sache geklappt, ich fand es aber blöd, das der Aufruf der StatusCallBack Routine nur beim Upload genutzt werden konnte. Also habe ich das umgestrickt und nun klappt der Upload mit Progressbar, aber der Download funzt null-komma-null. :( Zitat:
Lg Holger |
AW: ftpgetfile();
Was willst du uns jetzt mit den Beitrag sagen? Wenn es bei dir nicht funktioniert, wäre es wohl hilfreich, wenn du uns sagst, was nicht funktioniert und was du eventuell für eine Fehlermeldung bekommst.
|
AW: ftpgetfile();
Zitat:
... nix ... passiert. FtpGetFile wirft ein false zurück und das war´s. GetLastError bleibt ruhig und eine Exception wird auch nicht geworfen. In der FTPSession (also hier das hConnect) kann ich auf den FTP Server die Datei mit FtpOpenFile auch öffnen und die Größe auslesen und der Pfad und die lokalen Datei wird auch korrekt übergeben. Und jetzt kommst Du. :-D Lg Holger |
AW: ftpgetfile();
Zitat:
Zitat:
|
AW: ftpgetfile();
Zitat:
nichts passiert. Zitat:
Aber mit diesen distanzierten Wortspielen komme ich sicherlich nicht an die Lösung meines Problems. :( Wünsche Dir noch eine schöne Woche! Lg Holger |
AW: ftpgetfile();
Werte doch erst einmal die beiden HINTERNET aus. Wenn eins davon 0 ist, dann weiß man ja zumindest schonmal, wo es hakt.
|
AW: ftpgetfile();
Zitat:
FtpGetFile liefert sehr wohl eine Fehlermeldung: Zitat:
Localfile, Remotefile ... man sollte sich eben auch mal ansehn, was da gemacht wird und ob die Parameter auch stimmen, so wie sie im MSDN vorgegeben sind. Die Beiden sind nä,lich genau gleich aufgebaut ... einfach
Delphi-Quellcode:
.
Ftp*etFile(Connection, Von, Nach, ...)
Außerdem sollte man sich, bei solchen Funktionen, welche blöder Weise GetLastError oftmals auch setzen, selbst wenn kein Fehler auftrat, diesen merken, bevor man weitere solcher Funktion ausruft, welche diesen Wert dann verfäschen würden. (was sie hier auch tun) Außerdem sollte man jede Funktion einzeln behandeln, wenn, so wie es hier vorliegt, Funktionsaufrufe aufeinander aufbauen, bzw. von den Vorgängern abhängig sind.
Delphi-Quellcode:
uses
WinInet; function GetFtpFile(Server, Username, Password, LocalFile, RemoteFile: String; Port: Word = 21; RaiseException: Boolean = False): Boolean; var Internet, Connection: HINTERNET; Error: HRESULT; begin Result := False; if (ExcludeTrailingPathDelimiter(LocalFile) <> LocalFile) or DirectoryExists(ExcludeTrailingPathDelimiter(LocalFile)) then begin SetLastError(ERROR_INVALID_PARAMETER); // da FtpGetFile bei sowas nur einen allgemeinen, nichtssagenden Fehler wirft Exit; end; if not DirectoryExists(ExtractFileDir(LocalFile)) then begin SetLastError(ERROR_PATH_NOT_FOUND); // da FtpGetFile bei sowas nur einen allgemeinen, nichtssagenden Fehler wirft Exit; end; Internet := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); if Assigned(Internet) then try Connection := InternetConnect(Internet, PChar(Server), Port, PChar(Username), PChar(Password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Error := GetLastError; if Assigned(Connection) then try Result := FtpGetFile(Connection, PChar(RemoteFile), PChar(LocalFile), False, 0, FTP_TRANSFER_TYPE_BINARY, 0); Error := GetLastError; finally InternetCloseHandle(Connection); end; finally InternetCloseHandle(Internet); if not Result then SetLastError(Error); end; if RaiseException then RaiseLastOSError; end;
Delphi-Quellcode:
if not GetFtpFile(... {, False}) then
RaiseLastOSError; // oder GetFtpFile(..., True); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz