`
isiqi
  • 浏览: 16045191 次
  • 性别: 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传输

    pb实现http和ftp原码

    pb实现http和ftp原码

    PB写的FTP上传下载工具

    PB写的FTP上传下载工具

    pb12powerbuilder12ftp上传下载demo示例源码.zip

    pb12powerbuilder12ftp上传下载demo示例源码,用于从云服务器上面上传下载文件,先开通云服务的ftp功能设置登录用户名和密码那些

    pb上传文件到服务器硬盘上

    pb上传文件到服务器硬盘上,实现ftp传输

    Ftp.rar_bear91i_ftp下载pb9.0_pb文件发送_setting53n

    在用PB进行开发时常常需要用到ftp功能,最典型的应用就是将数据窗口中的数据生成txt文件,...由于pb本身并未提供任何ftp的功能,因此想在pb中进行ftp传输,只能应用pb以外的资源。以下是笔者在pb开发中总结出来的方法。

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

    pb12.5开发Ftp功能源码,ftp已经封装为通用组件,支持标准ftp协议。传输大文档已经过测试,稳定、高效。 本人原创请多多支持。

    FTP文件传输源代码

    FTP文件传输源代码,pb8.0测试通过

    PB调用API应用FPT文件传输.

    PB通过调用API函数实现通过FPT方式进行文件传输。对于应用软件自动升级功能具有一定帮助。

    ftp上传控件

    ftp上传控件(FTP ActiveX OCX Control)是用Scoket API实现的FTP功能的客户端控件,可以在网页中实现上传文件的功能,可以在多种开发环境中使用,如VB,VC,C#,.net,PB,Delphi等。 >>上传、下载单个多个文件或目录,...

    Novatel PB6 GNSS接收机网口配置及FTP数据下载教程_矢网接收机模式设置

    Novatel PB6 GNSS接收机网口配置及FTP数据下载教程,适用于导航定位领域相关技术人员

    PowerBuilder 9.0软件项目开发实践完整版(pdf)

    第7章 ftp文件传输系统 7.1 系统设计 7.2 数据库设计 7.3 数据库的实现 7.4 ftp的发布 7.5 应用对象的创建 7.6 全局变量和全局外部函数的定义 7.7 各对象的设计及其脚本的编写 7.8 应用程序的运行 7.9 小结...

    powerbuilder 9.0软件项目开发实践

    第7章 ftp文件传输系统 7.1 系统设计 7.2 数据库设计 7.3 数据库的实现 7.4 ftp的发布 7.5 应用对象的创建 7.6 全局变量和全局外部函数的定义 7.7 各对象的设计及其脚本的编写 7.8 应用程序的运行 7.9 小结...

    PowerBuilder 9.0软件项目开发实践pdf2

    第7章 ftp文件传输系统 7.1 系统设计 7.2 数据库设计 7.3 数据库的实现 7.4 ftp的发布 7.5 应用对象的创建 7.6 全局变量和全局外部函数的定义 7.7 各对象的设计及其脚本的编写 7.8 应用程序的运行 7.9 小结 第8章 ...

    java开源包3

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包4

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    JAVA上百实例源码以及开源项目

    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上...

Global site tag (gtag.js) - Google Analytics