Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz