在用PB進行開發(fā)時常常需要用到ftp功能(2009-09-21 18:19:56)
---- 在用PB進行開發(fā)時常常需要用到ftp功能,最典型的應用就是將數(shù)據(jù)窗口中的數(shù)據(jù)生成txt文件,然后將此數(shù)據(jù)文件用ftp發(fā)送到遠程服務器上 去。由于pb本身并未提供任何ftp的功能,因此想在pb中進行ftp傳輸,只能應用pb以外的資源。以下是在pb開發(fā)中總結出來的幾種方法。 ---- 1. 使用外部命令 ---- 這種方法就是在pb程序中運行Windows中自帶的ftp命令。具體做法是在程序中生成一個.bat文件,將要運行的ftp命令寫到此文件中,再運行這 個批處理文件。假設ftp服務器ip為 202.114.67.2,用戶名為user,口令12345,現(xiàn)在要將本地c:\temp\下的t00001.txt文件上傳到服務器的\txtdata \目錄下去。則pb代碼如下: integer li_bat //文件名指針 li_bat = FileOpen(path_ftp+'get_file.bat', lineMode!, Write!, LockWrite!, Replace!) FileWrite(li_bat, 'cd c:\temp\') FileWrite(li_bat, 'ftp 202.114.67.2') FileWrite(li_bat, 'user) FileWrite(li_bat, '12345') FileWrite(li_bat, 'put t00001.txt \txtdata\t00001.txt') FileWrite(li_bat, 'bye') FileWrite(li_bat, 'exit') FileClose(li_bat) Run(path_ftp+'get_file.BAT',Minimized!) messagebox("提示信息","數(shù)據(jù)上報完畢") ---- 此方法的優(yōu)點是簡單易行,既不要調用API函數(shù),也不需加入OLE。缺點一是要運行外部命令,將會打開dos窗口,顯得不夠和諧;二是數(shù)據(jù)傳輸 成功與否無法判斷,在編程時不好控制。 ---- 2. 使用Internet Transfer控件 ---- Internet Transfer控件是網絡編程中非常常用的控件。它支持目前Internet上使用最為廣泛的兩種協(xié)議,即Http和Ftp。在windows98中它是由 系統(tǒng)自帶。有關此控件的詳細資料請查看相關書籍。這里我們只使用它的Ftp功能。在PB中加入一個與此控件的OLE,取名ole_1,并按以下數(shù)據(jù)設置此 控件的屬性(注意不是ole_1的屬性),表中沒有列出的屬性請用缺省值: 屬性 值 說明 Protocol 2 指定用Ftp協(xié)議 Remotehost 202.114.67.2 Username User1 Password 12345 ---- Internet Transfer控件支持兩種數(shù)據(jù)傳輸方式,即同步傳輸方式和異步傳輸方式。同步傳輸方式在數(shù)據(jù)傳輸時會阻塞程序,此功能是通過調用 該控件的OpenUrl方法來實現(xiàn)的;而異步方式則不會阻塞程序,它通過調用控件的Execute方法來實現(xiàn)。同步方式雖然易于控制,但它只能下載文件, 不能上傳文件,這使得它在實際的應用受到限制。要實現(xiàn)數(shù)據(jù)的上傳下載,只能使用此控件的異步傳輸方式。要完成上例中的功能,在PB程序中加入 以下語句即可: Ole_1.object.execute("","put c: \temp\t00001.txt \txtdata\t00001.txt") ---- 同理,如果要將服務器上的文件下載到本地,在程序中加入即下語句: Ole_1. object.execute("","get \txtdata\t00001.txt c:\temp\t00001.txt") ---- Internet Transfer控件的功能很強大,利用它足以制作一個功能比較完善的FTP工具,而且它是操作系統(tǒng)自帶的,在編程時不需要注冊新的控 件。但根據(jù)筆者的使用經驗,此控件也有兩個不能忽視的缺點,其一、它的數(shù)據(jù)上傳下載是異步傳輸?shù)?,在每次只運行一個ftp命令時尚可,如果一次 運行多個ftp命令就會出錯。比如說,我們想先進入服務器的\file目錄,再上傳數(shù)據(jù),這樣程序應如下: Ole_1.object.execute("","cd \file\") Ole_1.object.execute("","put c:\temp\t00001.txt \txtdata\t00001.txt") ---- 由于execute方法是異步執(zhí)行的,它不等第一個語句完成就開始執(zhí)行第二條語句,這樣可能服務器還來不及將當前目錄轉到\file下數(shù)據(jù)已經開始 上傳,造成錯誤。 ---- 其二、筆者還發(fā)現(xiàn)一個莫名其妙的問題,那就是利用此控件進行上傳時它會將上傳到服務器上的文件的文件名改為大寫,如上例中,本地的 t00001.txt上傳到服務器上后,它的名字會變成T00001.TXT,這在NT上自然無妨,但在Unix機器上就可能帶來錯誤。 ---- 3. 使用Mabry Internet FTP/X Control |