怎样使用Inet Tranfer控件实现从ftp站点上自动下载文件名中包含特定字符串的文件。例如:用户输入字符串"2005",然后自动下载FTP站点上所有文件名中包含该字符串的文件。或者用其他方法实行这个功能???

解决方案 »

  1.   

    FTP上按规则命名呀.用户输入2005,你传向ftp的要求文件列表却应该是具体到每一个文件的.那么规则其实是你在程序里制定的.
      

  2.   

    比如flashget的批量下载.那就是规则
      

  3.   

    如:
    如用户输入2005
    程序生成 app2005_001.dat-app2005_099.dat 一系列文件名,提交到ftp传输.
    对应的,你的ftp上文件就应是按程序生成文件名串的规则来命名.或者你是想弄个模糊的吗?
    比如,不管ftp上什么文件名,只要带有2005字样的,统统下载?1先行取得ftp上文件列表.斩头去尾留下文件名部分.进数组
    2与用户的输入比对.含用户输入串的提交传输
      

  4.   

    正如sektor(sektor)大大所言,就是需要“弄个模糊的”。这是我工作当中遇到的一个问题,我公司ftp站点上文件命名并没有一个明确的规则,我每天都要收集大量的每日统计数据。以前都是使用现有的一些ftp下载软件手工下载,占用很多的时间。请sektor(sektor)大大帮忙写一段简单的源码,我先学习一下。本人是新手,无以为报,只能表示万分感谢。
      

  5.   

    再向sektor(sektor)大大请教:使用Inet1控件Execute方法中的Dir 或者ls 命令可以对ftp上的目录搜索,请问如何将个搜索结果保存下来。
      

  6.   

    照着这个写应该没有问题的
    在窗体添加inet控件,一个command控件
    Dim FtpUrl As String
    Dim Username As String
    Dim PassWord As StringPrivate Sub Command1_Click()
      GetFileList (Trim("你要找的远程主机的目录"))
    End SubPrivate Sub Form_Load()
      FtpUrl = "ftp服务器地址"
      Username = "用户名"
      PassWord = "密码"
      init
    end sub
    Private Function init()
    On Error GoTo eh
     '------------------------------------------------------------------
     '初始化Inet
        With Form1.Inet1
            Form1.List1.AddItem (CStr(Now) + " init inet")
            .URL = "ftp://" + Trim(FtpUrl)
            .Username = Trim(Username)
            .PassWord = Trim(PassWord)
            .Execute , "dir"
            
            'Inet的StillExecuting表示是否成功,否则一直等待
            While .StillExecuting
            DoEvents
            Wend
            
            '向list中写入状态信息
            Form1.List1.AddItem CStr(Now) + " Inet init successfully!"
            Form1.Refresh
        End With 
    Exit Function
    eh:
    MsgBox "error", vbOKOnly, Me.Caption
    End Function
     Private Sub GetFileList(ByVal sDIR As String)Dim tstrsMe.List1.AddItem CStr(Now) + "显示文件名称"
    Me.List1.AddItem "*****************开始********************"
    Me.Refresh
    With Form1.Inet1    While .StillExecuting = True
            DoEvents
        Wend
        'inet控件的方法 查找远程主机的文件目录
        .Execute , "dir " + sDIR + ""
        
        While .StillExecuting = True
            DoEvents
        Wend
        
        'Inet控件的GetChunk方法得到目录路径数据
        Tstr = .GetChunk(0)
        
        tstrs = Split(Tstr, vbCrLf)
        
        For i = 0 To UBound(tstrs)
        
            If Trim(tstrs(i)) <> "./" And Trim(tstrs(i)) <> "../" And Trim(tstrs(i)) <> "" Then
            
            Me.List1.AddItem tstrs(i)
            Me.Refresh
            End If
        Next
        Me.List1.AddItem "*****************结束********************"
        Me.Refresh
    End WithEnd Sub
      

  7.   

    想快速解决问题不妨多用搜索,网络板很多现成的例子.上面是
    http://community.csdn.net/Expert/topic/3544/3544741.xml?temp=.5673944
     creazyfish(梳分头的鱼) ( ) 信誉:100 
    的完整回复,你要的关键内容都在了.取得文件列表.
      

  8.   

    上面是指定了目录,想遍历整个目录和子目录的话.
    结合兔子的:
    ==========
    Public Function GetFTPDirectory() As String
        Dim szDir As String
        szDir = String(1024, Chr$(0))
        If (FtpGetCurrentDirectory(hConnection, szDir, 1024) = False) Then
            ErrorOut Err.LastDllError, "FtpGetCurrentDirectory"
            Exit Function
        Else
            GetFTPDirectory = Left(szDir, InStr(1, szDir, String(1, 0), vbBinaryCompare) - 1)
        End If
    End FunctionPrivate Sub RefreshDirectoryListing()
        Dim Item As cDirItem
        Dim lstX As ListItem
        Dim sAttr As String
        '显示文件属性的字符串
        lblDir.Caption = "Current Directory: " & Trim(mFTP.GetFTPDirectory)
        '显示当前路径
        mFTP.GetDirectoryListing "*.*"
        '获得当前路径
        
        lv.ListItems.Clear
        '清除lv控件的Item
        'Set lstX = lv.ListItems.Add(, , "..")
        'lstX.SmallIcon = 1
        For Each Item In mFTP.Directory
             sAttr = ""
             With Item
                  If .Archive Then sAttr = sAttr & " A " Else sAttr = sAttr & " - "
                  If .Compressed Then sAttr = sAttr & " C " Else sAttr = sAttr & " - "
                  If .Directory Then sAttr = sAttr & " D " Else sAttr = sAttr & " - "
                  If .Hidden Then sAttr = sAttr & " H " Else sAttr = sAttr & " - "
                  If .Normal Then sAttr = sAttr & " N " Else sAttr = sAttr & " - "
                  If .Offline Then sAttr = sAttr & " O " Else sAttr = sAttr & " - "
                  If .ReadOnly Then sAttr = sAttr & " R " Else sAttr = sAttr & " - "
                  If .System Then sAttr = sAttr & " S " Else sAttr = sAttr & " - "
                  If .Temporary Then sAttr = sAttr & " T " Else sAttr = sAttr & " - "
             End With
             '设置属性字符串
             
             Set lstX = lv.ListItems.Add(, , Item.Filename)
             With lstX
                If Item.Directory Then
                '如果是目录
                   .SmallIcon = 1
                   .SubItems(1) = "< Directory >"
                Else
                '文件
                   .SmallIcon = 2
                   .SubItems(1) = Item.FileSize
                   .SubItems(2) = Item.LastWriteTime
                   .SubItems(3) = sAttr
                End If
             End With
        Next写出了上楼的,这楼的你自然会明白了.写出了一级目录,自然就可以递归到N级目录.
      

  9.   

    真的十分感谢sektor大大,帮我解决了一个工作中的大问题