微软的例子:
SAMPLE: VBFTP.EXE: Implementing FTP Using WinInet API from VB
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q175179请问VB支持FTP传输文件吗?
http://www.csdn.net/expert/topic/557/557906.xml?temp=.5869715

解决方案 »

  1.   

    为何来用Internet Transfer control?
      

  2.   

    为何不用Internet Transfer control?
      

  3.   

    http://www.csdn.net/expert/topic/181/181549.xml?temp=.6504633
    http://www.csdn.net/expert/topic/487/487993.xml?temp=.7528192
      

  4.   

    winsock好像不支持ftp协议,我可拿不准,没这么用过,不敢肯定
    说错了不负责,建议你用下面的
    Sub PoorMansFTPDim strTempDir As String
    Dim strTempFtpFile As String
    Dim strFileName As String
    Dim strSiteAddress As String
    Dim strUserName As String
    Dim strPassword As String
    Dim strRemoteDirectory As StringstrSiteAddress = "www.yourdomain.com"
    strUserName = "Username goes here"
    strPassword = "Password goes here or assigned in some other way"
    strRemoteDirectory = "upload directory, ie. wwwroot/path/path"strTempDir = Environ("Temp")
    If Len(strTempDir) = 0 Then strTempDir = "C:"
    strTempFtpFile = strTempDir & "\fdty.l34"
    strFileName = "C:\SomePath\SomeFileToUpload.xxx"'''Write FTP commands into a file
    Open strTempFtpFile For Output As #1    Print #1, "open " & strSiteAddress
        Print #1, "user " & strUserName
        Print #1, strPassword   '''some servers may require "PW " & strPassword
                                '''but most automatically ask for it
        Print #1, "type binary"
        Print #1, "cd " & strRemoteDirectory
        Print #1, "put " & strHtmlFileName
        Print #1, "Quit"Close #1''' call ftp.exe with -n parameter, which will supress the automatic feedback
    ''' from the server, and -s which contains the path to the file to use for
    ''' ftp commands.
    Call Shell("ftp -n -s:" & strTempFtpFile, vbHide)End Sub
      

  5.   

    我手头的有关ftp的相关资料,仅供参考:
    (摘自《程序员大本营光盘》,如有雷同,那是肯定的,不关我的事)
    FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作 
    系统下使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP的内部命令,可 
    以大大方便使用者,对于现在拨号上网的用户,如果ISP提供了shell可以使用noh 
    up,那么ftp将是你最省钱的上download方式, 
    ftp的命令行格式为:ftp -v -d -i -n -g[主机名]   
    -v 显示远程服务器的所有响应信息。 
    -d 使用调试方式。    
    -n 限制ftp的自动登录,即不使用.netrc文件。 
    -g 取消全局文件名。 
    ftp使用的内部命令如下(其中括号表示可选项): 
      1.![cmd[args]在本地机中执行交互shell、exit回到ftp环境,如!ls*.zip 。 
      2.¥ macro-ame[args]执行宏定义macro-name。 
      3.account[password]提供登录远程系统成功后访问系统资源所需的补充口令 。 
      4.appendlocal-file[remote-file]将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。 
      5.ascii 使用ascii类型传输方式。 
      6.bell每个命令执行完毕后计算机响铃一次。 
      7.bin使用二进制文件传输方式。 
      8.bye退出ftp会话过程。 
      9.case在使用mget时,将远程主机文件名中的大写转为小写字母。 
      10.cd remote-dir 进入远程主机目录。 
      11.cdup进入远程主机目录的父目录。 
      12.chmod modefile-name将远程主机文件file-name的存取方式设置为mode,如chmod 777 a.out。 
      13.close中断与远程服务器的ftp会话(与open对应)。 
      14.cr使用asscii方式传输文件时,将回车换行转换为回行。 
      15.delete remote-file删除远程主机文件。 
      16.debug[debug-value]设置调试方式,显示发送至远程主机的每条命令,如debup3,若 设为0,表示取消debug。 
      17.dir[remote-dir][local-file]显示远程主机目录,并将结果存入local-file。 
      18.disconnection同close。 
      19.form format将文件传输方式设置为format,缺省为file方式。 
      20.getremote-file[local-file]将远程主机的文件remote-file传至本地硬盘的local-file。 
      21.glob设置mdelete、mget、mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。 
      22.hash每传输1024字节,显示一个hash符号(#)。 
      23.help[cmd]显示ftp内部命令cmd的帮助信息,如help get。 
      24.idle[seconds]将远程服务器的休眠计时器设为[seconds]秒。 
      25.image设置二进制传输方式(同binary) 
      26.lcd[dir]将本地工作目录切换至dir。 
      27.ls[remote-dir][local-file]显示远程目录remote-dir,并存入本地local-file。 
      28.macdef macro-name定义一个宏,遇到macdef下的空行时,宏定义结束。 
     29.mdelete[remote-file]删除远程主机文件。 
      30.mdir remote-files local-file与dir类似,但可指定多个远程文件,如mdir*.o.*. zipoutfile。 
      31.mget remote-files传输多个远程文件。 
      32.mkdir dir-name 在远程主机中建一目录。 
      33.mls remote-file local-file同nlist,但可指定多个文件名。 
      34.mode[mode-name]将文件传输方式设置为mode-name,缺省为stream方式。 
      35.modtime file-name显示远程主机文件的最后修改时间。 
      36.mput local-file将多个文件传输至远程主机。 
      37.newerfile-name如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。 
      38.nlist[remote-dir][local-file]显示远程主机目录的文件清单,并存入本地硬盘的local-file。 
      39.nmap[inpatternoutpattern]设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换, 
    如nmap¥1.¥2.¥3[¥1,¥2].[¥2,¥3],则传输文件a1 .a2.a3时,文件名变为a1、a2, 
    该命令特别适用于远程主机为非U-NIX机的情况。 
    40.ntrans[inchars[outchars]设置文件名字符的翻译机制,如ntrans1R,则文件名LL L将变为RRR。 
      41.open host[port]建立指定ftp服务器连接,可指定连接端口。    
    42.passive进入被动传输方式。 
      43.prompt设置多个文件传输时的交互提示。 
      44.proxyftp-cmd在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。 
    第一条ftp命令必须为open,以首先建立两个服务器间的连接。 
      45.put local-file[remote-file]将本地文件local-file传送至远程主机。 
      46.pwd显示远程主机的当前工作目录。 
      47.quit同bye,退出ftp会话。 
      48.quote arg1,arg2……将参数逐字发至远程ftp服务器,如quote syst。 
      49.recv remote-file[local-file]同get。 
      50.regetremote-file[local-file]类似于get,但若local-file存在,则从上次传输中断处续传。 
      51.rhelp[cmd-name]请求获得远程主机的帮助。 
      52.rstatus[file-name]若未指定文件名,则显示远程主机的状态,否则显示文件状态。 
      53.rename[from][to]更改远程主机文件名。    
    54.reset清除回答队列。 
      55.restart er从指定的标志er处,重新开始get或put,如restart 130。 
      56.rmdir dir-name删除远程主机目录。 
      57.runique设置文件名唯一性存储,若文件存在,则在原文件后加后缀。 
      58.send local-file[remote-file]同put。 
      59.sendport设置PORT命令的使用。 
      60.site arg1,arg2……将参数作为SITE命令逐字发送至远程ftp主机。 
      61.size file-name显示远程主机文件大小,如site idle 7200。 
      62.status显示当前ftp状态。 
      63.struct[struct-name]将文件传输结构设置为struct-name,缺省时使用stream结构。 
    64.sunique将远程主机文件名存储设置为唯一(与runique对应)。 
      65.system显示远程主机的操作系统类型。 
      66.tenex将文件传输类型设置为TENEX机所需的类型。 
      67.tick设置传输时的字节计数器。 
      68.trace设置包跟踪。 
      69.type[type-name]设置文件传输类型为type-name,缺省为ascii,如typebinary,设置 二进制传输方式。 
      70.umask[newmask]将远程服务器的缺省umask设置为newmask,如umask 3。 
    71.useruser-name[password][account]向远程主机表明自己的身份,需要口令时,必须输入口令,如user anonymous my@email。 
      72.verbose同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on. 
      73.?[cmd]同help。   那么如何应用这些命令提高效率呢?下面我举一个例子,如何利用fttp进行 
    后台下载,假设你的ISP给你提供了shell并且可以用nohup,你想由fttp.downlo 
    ad.com/pub/internet/下载一个30M的程序aaa.zip具体步骤如下: 
    1.用notepad做一个文件如aaa1内容如下 
       open ftp.dwonload.com user an onymous [email protected] 
    cd /pub/internet/ i get aaa.zip close bye 
    2.拨号登录到你的ISP上。 
    用telnet 或netterm登录到shell,一般都在你的home子目录里bbs~/ 
    3.用fttp上传aaa1到ISP服务器你的子目录。      
    4. 执行nohup fttp -invd aaa2& 这样这个进程就被放在ISP服务器的后台进行了, 
    如果你想知道情况如何,可以more aaa2就可以知道情况如何了。这时你可以断线了或干点别的, 
    估计时间到了(time约=30M/(33.6K/9)s)拨号上去,more aaa2如果显示成功下载aaa.zip, 
    就表示aaa.zip已经被下载到ISP的服务器上了,你再由ISP的服务器拉回来就相当与点对点了, 
    记得下载完成后del掉你的文件(aaa.zip),免得浪费ISP资源,它会关掉shell的。
      

  6.   

    在 微软的例子里, 是完全用 Api 实现的。
    其它 都是 Internet Transfer control
      

  7.   

    http://www.dapha.net/vb/list.asp?id=676
      

  8.   

    http://www.dapha.net/vb/list.asp?id=667
      

  9.   

    http://www.dapha.net/vb/list.asp?id=667
      

  10.   

    參考FTP檔案傳輸協議
    http://rfc.sunsite.dk/rfc/rfc909.html
      

  11.   

    Public Function FTPGetFile(sLocal As String, sRemote As String) As Boolean
        Dim Data(BUFFERSIZE - 1) As Byte ' array of 100 elements 0 to 99
        Dim Written As Long
        Dim Size As Long
        Dim Sum As Long
        Dim lBlock As Long
        FTPGetFile = False
                
        Sum = 0
        lBlock = 0
        
        sLocal = Trim(sLocal)
        sRemote = Trim(sRemote)
        
        If sLocal <> "" And sRemote <> "" Then
          Size = GetFTPFileSize(sRemote)
          If Size > 0 Then      hFile = FtpOpenFile(hConnection, sRemote, GENERIC_READ, dwType, 0)
              If hFile = 0 Then
                  ErrorOut Err.LastDllError, "FtpOpenFile:GetFile"
                  Exit Function
              End If
              
              Open sLocal For Binary Access Write As #1
               
             ' Seek #1, 1        '第一次下载
               Seek #1, LOF(1)     '从下载断点出继续写入
             
             Sum = 1
             For lBlock = 1 To Size \ BUFFERSIZE
                  If (InternetReadFile(hFile, Data(0), BUFFERSIZE, Written) = 0) Then
                      ErrorOut Err.LastDllError, "InternetReadFile"
                      Close #1
                      Exit Function
                  End If
                  Put #1, , Data
                  DoEvents
                  Sum = Sum + BUFFERSIZE
                  RaiseEvent FileTransferProgress(Sum, Size)
              Next lBlock
              
              ReDim Data2((Size Mod BUFFERSIZE) - 1) As Byte
              If (InternetReadFile(hFile, Data2(0), Size Mod BUFFERSIZE, Written) = 0) Then
                  ErrorOut Err.LastDllError, "InternetReadFile2"
                  Close #1
                  Exit Function
              End If
                          
              Put #1, , Data2
              
              Sum = Sum + (Size Mod BUFFERSIZE)
              Size = Sum
              RaiseEvent FileTransferProgress(Sum, Size)
              Close #1
              InternetCloseHandle (hFile)
              FTPGetFile = True
          End If
       End If
    End Function以上代码还有些小问题,没有取得FTP上的断点出,不过我想只要获得断点时已下载的大小,从 total-down(bayte)处继续读取文件应该没问题。
    等代码改好后发给你