皮皮网

【c读写文件源码】【技术导航整站源码】【超赛gm源码】ftp vb源码

时间:2024-11-23 08:05:00 分类:焦点 来源:开源ddos源码

1.VB做ftp上传工具

ftp vb源码

VB做ftp上传工具

       åœ¨VB中实现文件上传

       VisualBasic作为一个集应用程序开发、测试、查错功能于一体的集成式开发环境,c读写文件源码越来越受到程序员的青睐。笔者在开发某数据库维护系统的过程中,选择了VB5.0作为开发平台,Unix作为服务器端操作系统,Informix作为服务器数据库。

       é—®é¢˜çš„出现

       åœ¨å¼€å‘该维护系统的过程中,注意到Informix数据库的字段类型CLOB填入数据时需要函数FILETOCLOB("FILENAME","SERVER"),其中的"FILENAME"需要指出文件路径和文件名称。然而,在维护过程中此文件是在客户端执行的,这样就要求即时将文件传输到服务器端。

       è§£å†³åŠžæ³•

       1.FTP传输工具

       æˆ‘们首先使用FTP传输工具,用VB5.0中SHELL命令调用DOS批处理文件来实现传输的需要。

       Shell调用格式:

       Shell(pathname[,windowstyle])

       ä¾‹å­:Shell("c:\windows\upload.bat")

       æ‰¹å¤„理文件upload.bat的内容:

       c:\windows\ftphostname

       username

       password

       sendc:\zrh\upload.txtupload.txt

       bye

       è¯¥å‘½ä»¤å®žçŽ°äº†æ–‡ä»¶"upload.txt"的传输要求。在使用完毕之后,再调用命令把该文件删除。

       ä¾‹å­:Shell("c:\windows\del_up.bat")

       æ‰¹å¤„理文件del_up.bat的内容:

       c:\windows\ftphostname

       username

       password

       deleupload.txt

       bye

       è¿™æ ·,文件"upload.txt"被删除。

       ä½†æ˜¯,另一个问题出现了。由于Shell函数的运行机制是与其它程序同步执行,也就是说,当调用Shell函数的子程序还没有执行完毕之前,Shell函数后面的语句已经执行。在大批量添加数据的过程中,就会出现某个记录的文件还没有传到,而下一个插入语句(Insert)已经开始调用。这样,ODBC调用就会出现错误。

       2.INET控件

       InternetTransfer控件提供了Internet上最常使用的两种协议:HTTP和FTP。使用HTTP协议可以连接到WWW服务器上来下载文件;使用FTP协议则可以登录到FTP服务器。一般的FTP命令,例如CD、GET都可以通过Execute方法实现。

       ä¸‹é¢æ˜¯ä¸€ä¸ªè®¾ç½®INET控件属性的例子。

       inet1.URL=ftp://username:password@hostname/document

       inet1.Protocol=2-icFTP

       inet1.RemoteHost=hostname

       inet1.RemotePort=

       inet1.Username=username

       inet1.Password=password

       æ‰§è¡Œæ–‡ä»¶ä¼ è¾“:

       Inet1.Execute"ftp://username:password@hostname",_

       "PUT"&local_filename&"UPLOAD1.TXT"

       right1=Inet1.StillExecuting

       DoWhileright1

       right1=Inet1.StillExecuting

       DoEvents

       Loop

       è¿™æ ·ä¾¿å®žçŽ°äº†æ–‡ä»¶çš„上载。

       *SINET控件的优点

       INET控件与Shell()函数的不同之处在于INET控件通过调用语句

       right1=Inet1.StillExecuting

       DoWhileright1

       right1=Inet1.StillExecuting

       DoEvents

       Loop来控制语句执行的顺序。在文件传输工作未完成之前,程序不会执行其它语句,自然也就不会出现调用Shell函数所出现的问题。变量right1用来测试inet1的执行状态,如果进程中仍在进行文件传输的工作,则调用过程DoEvents给系统空闲时间来做文件传输工作,这样便成功地执行了文件上载的功能。该文件使用完毕之后将被删除。

       Inet1.Execute"ftp://informix:informix@rd",_

       "DELETEUPLOAD1.TXT"

       right1=Inet1.StillExecuting

       DoWhileright1

       right1=Inet1.StillExecuting

       DoEvents

       Loop

       å°†ä¸Šè½½çš„文件删除是为了避免占用服务器端磁盘空间。

       *S利用StateChanged事件提示信息

       æœåŠ¡å™¨åœ¨æ‰§è¡Œinet1.execute的同时也激活了Inet1_StateChanged事件,进程可以根据捕获到的状态进行动作。

       object_StateChanged(ByValStateAsInteger)

       State:整数类型Integer

       ä¸‹é¢æ˜¯çŠ¶æ€çš„说明。

       å¸¸æ•°å€¼ 描述icNone

       0 未报告状态icHostResolvingHost

       1 控件正在寻找指定主机的IP地址icHostResolved

       2 控件已成功找到指定主机的IP地址icConnecting

       3 控件正在与指定主机进行连接icConnected

       4 控件已成功与指定主机连接icRequesting

       5 控件正在向主机发出请求icRequestSent

       6 控件已成功向主机发出请求icReceivingResponse

       7 控件正在从主机接收反馈信息icResponseReceived

       8 控件已成功从主机接受反馈信息icDisconnecting

       9 控件正在与主机断开icDisconnected

        控件已与主机断开icError

        在与主机通信的过程中发生了错误icResponseCompleted

        请求结束且数据已经接收到

       ä¸‹é¢æ˜¯ä¸€ä¸ªä¾‹å­ã€‚

       PrivateSubInet1_StateChanged(ByValStateAsInteger)

       'RetrieveserverresponseusingtheGetChunk

       'methodwhenState=.Thisexampleassumesthe

       'dataistext.

       SelectCaseState

       '...Othercasesnotshown.

       CaseicResponseReceived'

       DimvtDataAsVariant'Datavariable.

       DimstrDataAsString:strData=""

       DimbDoneAsBoolean:bDone=False

       'Getfirstchunk.

       vtData=Inet1.GetChunk(,icString)

       DoWhileNotbDone

       strData=Data&vtData

       'Getnextchunk.

       vtData=Inet1.GetChunk(,icString)

       IfLen(vtData)=0Then

       bDone=True

       EndIf

       Loop

       txtData.Text=strData

       EndSelect

       EndSub->

copyright © 2016 powered by 皮皮网   sitemap