`
isiqi
  • 浏览: 16496976 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多
在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
---InternetTransfer控件支持两种数据传输方式,即同步传输方式和异步传输方式。同步传输方式在数据传输时会阻塞程序,此功能是通过调用该控件的OpenUrl方法来实现的;而异步方式则不会阻塞程序,它通过调用控件的Execute方法来实现。同步方式虽然易于控制,但它只能下载文件,不能上传文件,这使得它在实际的应用受到限制。要实现数据的上传下载,只能使用此控件的异步传输方式。要完成上例中的功能,在PB程序中加入以下语句即可:
Ole_1.object.execute("","putc:\temp\t00001.txt\txtdata\t00001.txt")

---同理,如果要将服务器上的文件下载到本地,在程序中加入即下语句:
Ole_1.object.execute("","get\txtdata\t00001.txtc:\temp\t00001.txt")

----InternetTransfer控件的功能很强大,利用它足以制作一个功能比较完善的FTP工具,而且它是操作系统自带的,在编程时不需要注册新的控件。但根据笔者的使用经验,此控件也有两个不能忽视的缺点,其一、它的数据上传下载是异步传输的,在每次只运行一个ftp命令时尚可,如果一次运行多个ftp命令就会出错。比如说,我们想先进入服务器的\file目录,再上传数据,这样程序应如下:
Ole_1.object.execute("","cd\file\")
Ole_1.object.execute("","putc:\temp\t00001.txt\txtdata\t00001.txt")

---由于execute方法是异步执行的,它不等第一个语句完成就开始执行第二条语句,这样可能服务器还来不及将当前目录转到\file下数据已经开始上传,造成错误。
---其二、笔者还发现一个莫名其妙的问题,那就是利用此控件进行上传时它会将上传到服务器上的文件的文件名改为大写,如上例中,本地的t00001.txt上传到服务器上后,它的名字会变成T00001.TXT,这在NT上自然无妨,但在Unix机器上就可能带来错误。
三、使用MabryInternetFTP/XControl
---此控件是由MabrySoftware公司提供的一个用于Ftp的控件,读者可以 www.mabry.com上去下载此控件(mftpx.ocx)。经比较,笔者认为在进行ftp传输方面,使用此控件进行编程最方便。它能完成绝大部分Ftp的功能,而且在编程中能很方便地控制程序的运行。比如说要完成前述功能,我们先注册该控件,然后在PB程序中加入一个该控件的Ole,取名Ole_1;一个单行编辑器Sle_1,用为显示有关信息;一个按钮Cb_1,点击它时进行Ftp操作。另设一个boolean型InstanceVariables,取名is_con,并将它设为false,用于指示网络是否已连通。对该控件的属性进行如下设置:
属性值说明
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画板中查看,此处不再详述。
分享到:
评论

相关推荐

    PB中实现ftp传输

    本文将深入探讨在PB中实现FTP传输的不同方法,包括通过批处理脚本、利用InternetTransfer控件以及采用第三方控件Mabry Internet FTP/X Control来实现。 ### 一、使用批处理脚本实现FTP传输 在PowerBuilder中,可以...

    pb实现http和ftp原码

    在PB中实现FTP,开发者需要熟悉FTP的命令和响应码,例如"USER"、"PASS"、"LIST"、"GET"和"PUT"。PB可以通过.NET或COM组件(如Microsoft的Internet Transfer Control)与FTP服务器交互,执行登录、目录浏览、文件上传...

    pb调用ftp下载文件可展示列表

    在本场景中,"pb调用ftp下载文件可展示列表" 指的是利用PowerBuilder进行FTP(File Transfer Protocol)功能的集成,使得用户可以通过PB应用浏览远程FTP服务器上的文件列表,并实现文件的下载操作,同时在界面上显示...

    PB实现Ftp功能源代码

    标题中的“PB实现Ftp功能源代码”指的是使用PowerBuilder(PB)开发的FTP客户端程序,该程序能够实现与FTP服务器的各种交互操作。PowerBuilder是一款流行的面向对象的编程工具,尤其在构建数据库应用方面有着广泛的...

    PB写的FTP上传下载工具

    标题中的“PB写的FTP上传下载工具”指的是使用PowerBuilder(PB)开发的,用于实现FTP(File Transfer Protocol)文件传输功能的应用程序。PowerBuilder是一种强大的可视化编程环境,尤其适合于构建数据库应用程序。...

    PB9 FTP上传与下载实例

    在PB9中实现FTP功能,首先需要对PB9的编程环境有深入理解。PB9是Sybase公司的一款强大的Windows应用开发工具,它采用可视化编程界面,支持事件驱动的编程模型,主要使用DataWindow对象处理数据库操作。而seinweb.dll...

    PB FTP 使用实例

    8. **性能优化**:通过合理的缓冲区大小设置和批量传输策略,可以提高FTP传输的性能和效率。 9. **日志记录**:为了追踪和审计FTP活动,可以在PB代码中添加日志记录功能,保存每次FTP操作的详细信息。 10. **测试...

    pb ftp上传

    描述中提到的“pb上传文件到服务器硬盘上完美解决方案”可能是指一个具体的代码示例或者库,可以帮助开发者在PowerBuilder应用中实现FTP文件上传功能。其中提到了“MFTPX.OCX”文件,这可能是一个ActiveX控件,用于...

    ftp实例_PB code

    PB FTP 实例详解 PowerBuilder (PB) 是一种流行的编程环境,主要用于开发企业级应用程序,尤其是在数据库应用领域。FTP(File Transfer ...通过理解和应用这些知识点,可以高效地在PB应用中实现文件的FTP传输。

    pb-ftp.rar_FTP PB_PowerBuilder_ftp_pb_pb ftp

    在IT行业中,FTP(File Transfer Protocol)是一种广泛用于在互联网上进行文件传输的标准协议。PowerBuilder(PB)是一款历史悠久的面向对象的开发工具,尤其在企业级应用开发中备受青睐。当你需要在PowerBuilder...

    PB9使用api实现ftp查看与下载的源码

    7. **PB9的事件驱动编程**:PB9的用户界面是事件驱动的,因此在实现FTP查看与下载时,可能需要监听用户操作,如点击按钮触发FTP命令的执行。 8. **数据窗口组件**:PB9的数据窗口组件(DataWindow)可以用来显示FTP...

    PB FTP自动更新

    PB FTP自动更新是一种在PowerBuilder(PB)环境中实现的程序更新机制,它允许开发者通过FTP(File Transfer Protocol)协议来自动化地更新应用中的文件。这个功能对于那些需要定期发布补丁或新版本的软件产品尤其...

    FTP上传与下载pb9.0code

    描述中的“我自己用过,感觉可以”表明这个代码经过了实际测试,并且至少在某种程度上是功能完整的,能够满足FTP传输的基本需求。这可能包括连接到FTP服务器,浏览服务器上的文件,选择要上传或下载的文件,以及管理...

    PB用的ftp控件

    7. **错误处理和调试**:在实现FTP功能时,还需要考虑错误处理,如网络故障、权限问题或文件不存在等。PB提供了丰富的错误处理机制,如Try-Catch块,以便捕获和处理可能出现的问题。 综上所述,"PB用的ftp控件"是一...

    PB10.5版FTP程式

    7. **安全性**:FTP传输通常涉及敏感数据,所以程序可能采用了安全的FTP协议,如FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol),以加密传输内容,保护数据的安全。 8. **配置文件**:pb105_ftp...

    PowerBuilder9.0语言实现FTP上传与下载

    对于采用PowerBuilder 9.0作为开发工具的项目,如何实现在受限环境中通过FTP(文件传输协议)进行文件上传与下载,是一个重要的技术点。本文将深入探讨如何在PowerBuilder 9.0中实现这一功能,并提供相关源码供参考...

    pb12.5开发FTP控件及演示功能(原创)

    本篇将深入探讨如何在PB12.5中开发FTP控件,并通过源代码分析其实现细节。 首先,"pb12.5开发FTP控件及演示功能(原创)"这个标题表明,作者已经完成了一个基于PB12.5的FTP组件,该组件不仅实现了FTP的基本功能,还...

Global site tag (gtag.js) - Google Analytics