Delphi ftpgetfile

Posted

技术标签:

【中文标题】Delphi ftpgetfile【英文标题】: 【发布时间】:2013-07-11 09:53:24 【问题描述】:

我正在使用这个函数从ftp连接中获取文件,

function GetFileFromFTP(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
  good:boolean;
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);
  good := FtpGetFile(hconnect, pchar(remotefile), pchar(localfile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN or INTERNET_FLAG_DONT_CACHE, 0);
  InternetCloseHandle(hconnect);
  Result := good;
end;

问题是当我像这样使用服务器字符串时:

var server:string;

server := 'ftp://192.168.1.1/XDIRECTORY/'; //IT CANT GET THE FILE
server := 'localhost'; //GETS THE FILE


procedure TForm1.btn1Click(Sender: TObject);
begin
if GetFileFromFTP(server, '', '', 'upx2.exe', 'upx.exe') then
begin
Caption := 'Install succesfull';
end
else
begin
Caption := 'Install NOT succesfull';
end;

我不明白为什么ftp服务器无法获取文件,如果文件在文件夹中,或者是否将使用服务器IP地址。

如果我将服务器设置为 localhost 会更好

【问题讨论】:

【参考方案1】:

因为服务器是服务器而不是 URI。并且 URI 是 URI 而不是服务器。您应该根据您选择使用的功能的要求分离 URI 的组件。

阅读https://www.google.ru/search?client=opera&q=MSDN+FtpGetFile&sourceid=opera 并确定在哪个变量中预期的内容。

阅读http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax如何解析URL并将服务器名和远程文件名提取到不同的变量中。

在字符串ftp://user:password@192.168.1.1:21/XDIRECTORY/YDIRECTORY/ZDIRECTORY/filename 中,只有192.168.1.1 是一个“服务器”——其余的都是不同的部分,而不是“服务器”。您应该将这些部分提取到适当的单独变量中,并将它们传递给函数,如 MSDN 上记录的那样。

GetFileFromFTP(server, '', '', 'upx2.exe', 'upx.exe') - 我认为这里的最后两个参数是错误的 - 它们都应该是完全限定的名称,包括路径。


奖励:重新制定

procedure TForm1.btn1Click(Sender: TObject);
begin
if GetFileFromFTP(server, '', '', 'upx2.exe', 'upx.exe') then
begin
Caption := 'Install succesfull';
end
else
begin
Caption := 'Install NOT succesfull';
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  Caption := 'Install was ' +  
      IfThen( 
          not GetFileFromFTP(server, '', '', 'upx2.exe', 'upx.exe'),
      'NOT ')
   + 'succesfull.';
end;

【讨论】:

以上是关于Delphi ftpgetfile的主要内容,如果未能解决你的问题,请参考以下文章

如何安装Delphi5

通过delphi执行DOS??

delphi 2010 编译乱码问题

delphi第三方控件是如何安装到delphi里去的???

delphi调用外部程序~~~~~~~~~~~~

Delphi和borland Delphi 一样吗