Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi WinInet FTPPutFile() klappt net :x (https://www.delphipraxis.net/118526-wininet-ftpputfile-klappt-net-x.html)

sk0r 9. Aug 2008 14:14


WinInet FTPPutFile() klappt net :x
 
Delphi-Quellcode:
function UploadToFtp(ftp, name, pw, _file: String):LongBool;
var
  hNet, hCon: Pointer;
begin
  result := false;
  hNet := InternetOpen('YouAreSkored', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if hNet <> nil then
  begin
    hCon := InternetConnect(hNet, PChar(ftp), INTERNET_DEFAULT_FTP_PORT, PChar(name), PChar(pw), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    if hCon <> nil then
    begin
      result := FtpPutFile(hNet, PChar(_file), PChar(ExtractFileName(_file)), FTP_TRANSFER_TYPE_ASCII, 0);
      InternetCloseHandle(hCon);
    end;
    InternetCloseHandle(hNet);
  end;
end;
hCon ist immer nil. Weiß jemand wieso?

MfG: sk0r

marabu 9. Aug 2008 14:58

Re: WinInet FTPPutFile() klappt net :x
 
Hallo,

WinInet wird es wissen:

Delphi-Quellcode:
const
  S_AGENT = 'YouAreSkored';

function UploadToFtp(serverName, userid, password, fileName: string): LongBool;
var
  hNet, hCon: HINTERNET;
begin
  Result := False;
  hNet := InternetOpen(S_AGENT, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if Assigned(hNet) then
  begin
    hCon := InternetConnect(hNet, PChar(servername),
        INTERNET_DEFAULT_FTP_PORT, PChar(userid), PChar(password),
        INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0
    );
    if Assigned(hCon) then
    begin
      Result := FtpPutFile(hNet, PChar(fileName),
          PChar(ExtractFileName(fileName)), FTP_TRANSFER_TYPE_ASCII, 0
      );
      InternetCloseHandle(hCon);
    end else ShowMessage(SysErrorMessage(GetLastError));
    InternetCloseHandle(hNet);
  end else ShowMessage(SysErrorMessage(GetLastError));
end;
Grüße vom marabu

sk0r 9. Aug 2008 15:15

Re: WinInet FTPPutFile() klappt net :x
 
Da zeigt er bei mir keine Nachricht an. :x

marabu 9. Aug 2008 15:25

Re: WinInet FTPPutFile() klappt net :x
 
So aus der Ferne sieht es dann sehr gut aus: Ohne Nachricht auch kein Fehler.
Bist du mal schrittweise durch den Code gegangen?

sk0r 9. Aug 2008 18:24

Re: WinInet FTPPutFile() klappt net :x
 
Klar, aber ich sehe ja auch nicht den geringsten Fehler. :x

toms 9. Aug 2008 19:06

Re: WinInet FTPPutFile() klappt net :x
 
Hallo,

FtpPutFile muss der Rückgabewert von InternetConnect übergeben werden. D.h hCon anstatt hNet.

Delphi-Quellcode:
Result := FtpPutFile(hCon, PChar(fileName),
          PChar(ExtractFileName(fileName)), FTP_TRANSFER_TYPE_ASCII, 0 
      );

sk0r 10. Aug 2008 11:05

Re: WinInet FTPPutFile() klappt net :x
 
Ich komme ja nicht mal bis zu FTPPutFile. :(

toms 10. Aug 2008 16:37

Re: WinInet FTPPutFile() klappt net :x
 
Wie hast du den "serverName" angegeben? Muss ohne "ftp://" sein.

marabu 10. Aug 2008 16:59

Re: WinInet FTPPutFile() klappt net :x
 
Hallo,

nach Korrektur des von Tom gefundenen Fehlers funktioniert der Code einwandfrei.

Delphi-Quellcode:
const
  S_AGENT = 'YouAreSkored';

function UploadToFtp(serverName, userid, password, fileName: string): LongBool;
var
  hNet, hCon: HINTERNET;
begin
  Result := False;
  hNet := InternetOpen(S_AGENT, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if Assigned(hNet) then
  begin
    hCon := InternetConnect(hNet, PChar(servername),
        INTERNET_DEFAULT_FTP_PORT, PChar(userid), PChar(password),
        INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0
    );
    if Assigned(hCon) then
    begin
      Result := FtpPutFile(hCon, PChar(fileName),
          PChar(ExtractFileName(fileName)), FTP_TRANSFER_TYPE_ASCII, 0
      );
      InternetCloseHandle(hCon);
    end else ShowMessage(SysErrorMessage(GetLastError));
    InternetCloseHandle(hNet);
  end else ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TDemoForm.TestClick(Sender: TObject);
begin
  if UploadToFtp('localhost', 'achim', '', ExtractFileName(ParamStr(0)))
    then ShowMessage('alli swell')
    else ShowMessage(SysErrorMessage(GetLastError));
end;
Das Protokoll ist natürlich nicht Bestandteil des Server-Namens. Ich würde die Prozedur noch so abändern, dass die Datei nicht immer im Current Working Directory abgelegt wird.

Freundliche Grüße

sk0r 10. Aug 2008 19:40

Re: WinInet FTPPutFile() klappt net :x
 
Joa, es liegt gar nicht am Code, sondern an meinem FTP. Kennt ihr ohost.de?
Habe mich versucht zu name.na.ohost.de zu verbinden, aber das klappt nicht. Es liegt
also an ohost selbst. :o

toms 10. Aug 2008 21:07

Re: WinInet FTPPutFile() klappt net :x
 
Zitat:

Zitat von sk0r
Joa, es liegt gar nicht am Code, sondern an meinem FTP. Kennt ihr ohost.de?
Habe mich versucht zu name.na.ohost.de zu verbinden, aber das klappt nicht. Es liegt
also an ohost selbst. :o

Kommt denn mit einem ftp Client eine Verbindung zu Stande?


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