![]() |
ftp download cannot find file ???
Hallo zusammen, habe nochmals eine Frage, die aber etwas komisch ist, nuja.
Ich habe immer noch folgenden Code für den Download:
Delphi-Quellcode:
Jetzt gibt es aber bei manchen Servern Problemen, keine Ahnung??
{
The following function shows how to connect to a ftp server and download a file. It uses the functions from wininet.dll. You need a ProgressBar to show the progress and a Label to show progress informations. } uses WinInet, ComCtrls; function FtpDownloadFile(strHost, strUser, strPwd: string; Port: Integer; ftpDir, ftpFile, TargetFile: string; ProgressBar: TProgressBar): Boolean; function FmtFileSize(Size: Integer): string; begin if Size >= $F4240 then Result := Format('%.2f', [Size / $F4240]) + ' Mb' else if Size < 1000 then Result := IntToStr(Size) + ' bytes' else Result := Format('%.2f', [Size / 1000]) + ' Kb'; end; const READ_BUFFERSIZE = 4096; // or 256, 512, ... var hNet, hFTP, hFile: HINTERNET; buffer: array[0..READ_BUFFERSIZE - 1] of Char; bufsize, dwBytesRead, fileSize: DWORD; sRec: TWin32FindData; strStatus: string; LocalFile: file; bSuccess: Boolean; begin Result := False; { Open an internet session } hNet := InternetOpen('Program_Name', // Agent INTERNET_OPEN_TYPE_PRECONFIG, // AccessType nil, // ProxyName nil, // ProxyBypass 0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE { Agent contains the name of the application or entity calling the Internet functions } { See if connection handle is valid } if hNet = nil then begin ShowMessage('Unable to get access to WinInet.Dll'); Exit; end; { Connect to the FTP Server } hFTP := InternetConnect(hNet, // Handle from InternetOpen PChar(strHost), // FTP server port, // (INTERNET_DEFAULT_FTP_PORT), PChar(StrUser), // username PChar(strPwd), // password INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher? 0, // flag: 0 or INTERNET_FLAG_PASSIVE 0);// User defined number for callback if hFTP = nil then begin InternetCloseHandle(hNet); ShowMessage(Format('Host "%s" is not available',[strHost])); Exit; end; { Change directory } bSuccess := FtpSetCurrentDirectory(hFTP, PChar(ftpDir)); if not bSuccess then begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); ShowMessage(Format('Cannot set directory to %s.',[ftpDir])); Exit; end; { Read size of file } if FtpFindFirstFile(hFTP, PChar(ftpFile), sRec, 0, 0) <> nil then begin fileSize := sRec.nFileSizeLow; // fileLastWritetime := sRec.lastWriteTime end else begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); ShowMessage(Format('Cannot find file ',[ftpFile])); Exit; end; { Open the file } hFile := FtpOpenFile(hFTP, // Handle to the ftp session PChar(ftpFile), // filename GENERIC_READ, // dwAccess FTP_TRANSFER_TYPE_BINARY, // dwFlags 0); // This is the context used for callbacks. if hFile = nil then begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Exit; end; { Create a new local file } AssignFile(LocalFile, TargetFile); {$i-} Rewrite(LocalFile, 1); {$i+} if IOResult <> 0 then begin InternetCloseHandle(hFile); InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Exit; end; dwBytesRead := 0; bufsize := READ_BUFFERSIZE; while (bufsize > 0) do begin Application.ProcessMessages; if not InternetReadFile(hFile, @buffer, // address of a buffer that receives the data READ_BUFFERSIZE, // number of bytes to read from the file bufsize) then Break; // receives the actual number of bytes read if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE) then BlockWrite(LocalFile, buffer, bufsize); dwBytesRead := dwBytesRead + bufsize; { Show Progress } ProgressBar.Position := Round(dwBytesRead * 100 / fileSize); Form1.Label1.Caption := Format('%s of %s / %d %%',[FmtFileSize(dwBytesRead),FmtFileSize(fileSize) ,ProgressBar.Position]); end; CloseFile(LocalFile); InternetCloseHandle(hFile); InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Result := True; end; Wenn ich den Pfad einer Datei in eine Liste lade zeigt es mir eine Datei an 'examples.pdf '. Wenn ich aber die Datei mit der vorherigen Funktion laden möchte kommt folgende Meldung: Cannot find File Das verstehe ich eigentlich nicht, wenn sie icht vorhanden wäre würde sie doch auch nicht in der Liste anzeigen? Oder was mach ich falsch?? Vielen Dank im Vorraus, Gruss Blumi |
Re: ftp download cannot find file ???
Hi,
die Funktion FtpFindFirstFile() will einen fullname:
Delphi-Quellcode:
Grüße vom marabu
...
var ftpFullName: string; ... if (ftpDir = '') or (ftpDir[Length(ftpDir)] <> '/') then ftpDir := ftpDir + '/'; ftpFullName := ftpDir + ftpFile; if FTPFindFirstFile(hFTP, PChar(ftpFullName), sRec, 0, 0) <> nil then ... |
Re: ftp download cannot find file ???
Sry, leider hat es diesmal nicht so richtig funktioniert, besser gesagt es geht gar nichts mehr :(
Also wenn ich dort nciht ftpFile sondern ftpFullName stehen habe, dann aldet es nciht einmal eine Datei die mit ftpFullName funktioniert ! Ich habe es so eingebaut:
Delphi-Quellcode:
var ftpFullName: string; ... if (ftpDir = '') or (ftpDir[Length(ftpDir)] <> '/') then ftpDir := ftpDir + '/'; ftpFullName := ftpDir + ftpFile; { Read size of file } if FtpFindFirstFile(hFTP, PChar(ftpFullName), sRec, 0, 0) <> nil then begin fileSize := sRec.nFileSizeLow; // fileLastWritetime := sRec.lastWriteTime end else begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); ... Blumi |
Re: ftp download cannot find file ???
Hallo Blumi,
ich hatte den Code vorher mit meinem Filezilla Server getestet. Funktioniert der Code bei dir denn gar nicht oder nur in Verbindung mit bestimmten Servern? marabu |
Re: ftp download cannot find file ???
Hi
Also ich habe es auch mit Servern probiert die vorher funktionierten, und jetzt geht gar nichts mehr, es kommt immer die Fehlermeldung File Not Found |
Re: ftp download cannot find file ???
Hallo Blumi,
kannst du mir einen public ftp server nennen, bei dem mein Code versagt? Ich könnte das dann näher untersuchen. marabu |
Re: ftp download cannot find file ???
Hi
Nach mehrmailigem Ausprobieren habe ich es jetzt herausgefunden, wann es nicht geht. Uns zwar wenn der Dateiname ein Abstand enthält, Beispiel: "1 Zeichnen ... .pdf" !! Würd mich freuen wenn du es heruasbekommen könntest, wie ich das fertig bringe, habe dir den FTP geschickt, Gruss |
Re: ftp download cannot find file ???
Dann hat sich ja alles aufgeklärt - Leerstellen im Namen gestattet die von dir verwendete Funktion nicht:
Zitat:
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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