2013-07-11 231 views
0

我使用这个函数来得到FTP连接的文件,德尔福ftpgetfile

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

回答

0

,因为服务器是服务器,而不是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:[email protected]: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; 
+0

我得到了它现在的工作,谢谢 – XXXXXXXXXXXXXX