在PB中實現ftp傳輸

2021-08-22 05:26:52 字數 2508 閱讀 6291

在pb中實現ftp傳輸

(深圳:獨孤求敗2003-05-20)

在用pb進行開發時常常需要用到ftp功能,最典型的應用就是將資料視窗中的資料生成txt檔案,然後將此資料檔案用ftp傳送到遠端伺服器上去。由於pb本身並未提供任何ftp的功能,因此想在pb中進行ftp傳輸,只能應用pb以外的資源。以下是筆者在pb開發中總結出來的幾種方法。

一、使用外部命令

---這種方法就是在pb程式中執行windows中自帶的ftp命令。具體做法是在程式中生成乙個.bat檔案,將要執行的ftp命令寫到此檔案中,再執行這個批處理檔案。假設ftp伺服器ip為202.114.67.2,使用者名為user,口令12345,現在要將本地c:\temp\下的t00001.txt檔案上傳到伺服器的\txtdata\目錄下去。則pb**如下:

integerli_bat//檔名指標

li_bat=fileopen(path_ftp+'get_file.bat',linemode!,write!,lockwrite!,replace!)

filewrite(li_bat,'cdc:\temp\')

filewrite(li_bat,'ftp202.114.67.2')

filewrite(li_bat,'user)

filewrite(li_bat,'12345')

filewrite(li_bat,'putt00001.txt\txtdata\t00001.txt')

filewrite(li_bat,'bye')

filewrite(li_bat,'exit')

fileclose(li_bat)

run(path_ftp+'get_file.bat',minimized!)

messagebox("提示資訊","資料上報完畢")

---此方法的優點是簡單易行,既不要呼叫api函式,也不需加入ole。缺點一是要執行外部命令,將會開啟dos視窗,顯得不夠和諧;二是資料傳輸成功與否無法判斷,在程式設計時不好控制。

二、使用internettransfer控制項

---internettransfer控制項是網路程式設計中非常常用的控制項。它支援目前internet上使用最為廣泛的兩種協議,即http和ftp。在windows98中它是由系統自帶。有關此控制項的詳細資料請檢視相關書籍。這裡我們只使用它的ftp功能。在pb中加入乙個與此控制項的ole,取名ole_1,並按以下資料設定此控制項的屬性(注意不是ole_1的屬性),表中沒有列出的屬性請用預設值:

屬性值說明

protocol2指定用ftp協議

remotehost202.114.67.2

usernameuser1

password12345

ole_1.object.execute("","putc:\temp\t00001.txt\txtdata\t00001.txt")

---由於execute方法是非同步執行的,它不等第乙個語句完成就開始執行第二條語句,這樣可能伺服器還來不及將當前目錄轉到\file下資料已經開始上傳,造成錯誤。

---其

二、筆者還發現乙個莫名其妙的問題,那就是利用此控制項進行上傳時它會將上傳到伺服器上的檔案的檔名改為大寫,如上例中,本地的t00001.txt上傳到伺服器上後,它的名字會變成t00001.txt,這在nt上自然無妨,但在unix機器上就可能帶來錯誤。

三、使用mabryinternetftp/xcontrol

屬性值說明

host202.114.67.2

logonnameuser

logonpassword12345

timeout10根據實際情況設定

----在cb_1的clicked事件中加入以下**:

sle_1.text="正在連線....."

setpointer(hourglass!)

ole_1.object.connect()

ifis_conthen

sle_1.text="開始傳輸...."

ole_1.object.putfile("c:\temp\t00001.txt","/txtdata/t00001.txt")

sle_1.text="傳輸完畢!"

endif

setpointer(arrow!)

is_con=false

在ole_1的各事件中加入相應**:

connected事件:

iffconnectedthen

sle_1.text="連線成功!"

is_con=true

else

sle_1.text="連線失敗!"

is_con=false

endif

externalexception事件:

sle_1.text="外部錯誤,可能網路不通"

action=exceptionignore!

progress事件:

sle_1.text="已傳輸"+string(bytestransfered)+"位元組....."

----此控制項其它函式和屬性請在pb的browser畫板中檢視,此處不再詳述。

實現FTP自動傳輸檔案

實現ftp自動傳輸檔案 一 linux環境使用.netrc 在linux下可以使用.netrc檔案來達到自動傳輸的目的。1.在當前使用者目錄下建立.netrc檔案,內容如下 cat netrc machine 192.168.1.117 login oracle9i password oracle9...

在PB中利用DDE

powerbuilder 以下稱pb 是一種強有力的企業級資料庫應用系統開發工具,利用它可以方便地開發出資料庫系統的前台應用軟體。但由於用pb所開發的報表具有一定的侷限性 報表的表頭 列寬等都不能在應用程式中由使用者來進行調整,所以若使用者報表的格式有所變動,則必須在原程式中對報表進行調整,這在很大...

PB中實現串列埠通訊

在窗 口上加入ole控制項,選擇mscomm32。程式設計舉例如下 ole comm1.object.commport 1 ole comm1是ole控制項的名稱,commport是埠。ole comm1.object.settings 4800,n,8,1 設定通訊協議 ole comm1.obj...