2013-07-11 230 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