Home
Search
 
What's New
Index
Books
Links
Q & A
Newsletter
Banners
 
Feedback
Tip Jar
 
C# Helper...
 
XML RSS Feed
Follow VBHelper on Twitter
 
 
MSDN Visual Basic Community
 
 
 
 
 
TitleUpload and download files using FTP
KeywordsFTP, upload, download
CategoriesInternet
 
Use the Internet Transfer Control.

Subroutine AddMessage simply displays status messages to keep you informed of what's happening.

When you click the Download button, cmdDownload_Click sets the control's URL, UserName, and Password properties in that order. It then calls the control's Execute method passing it the command name Get, the name of the remote file, and the local file where it should be downloaded.

When you click Upload, the programagain sets the control's URL, UserName, and Password properties in that order. It then calls the control's Execute method passing it the command name Put, the name of the local file, and the location on the server where the file should be placed.

The control's StateChanged event handler displays a message telling you what's happening. The most interesting case is when the routine reads the icResponseCompleted condition. If the control is downloading a directory listing, the program uses the control's GetChunk method to read the listing in pieces.

 
Private m_GettingDir As Boolean
Private Sub AddMessage(ByVal msg As String)
    txtResults.Text = txtResults.Text & vbCrLf & msg
    txtResults.SelStart = Len(txtResults.Text)
End Sub

Private Sub cmdDownload_Click()
Dim host_name As String

    Enabled = False
    MousePointer = vbHourglass
    txtResults.Text = "Working"
    txtResults.SelStart = Len(txtResults.Text)
    DoEvents

    ' You must set the URL before the user name and
    ' password. Otherwise the control cannot verify
    ' the user name and password and you get the error:
    '
    '       Unable to connect to remote host
    host_name = txtHost.Text
    If LCase$(Left$(host_name, 6)) <> "ftp://" Then _
        host_name = "ftp://" & host_name
    inetFTP.URL = host_name

    inetFTP.UserName = txtUserName.Text
    inetFTP.Password = txtPassword.Text

    ' Do not include the host name here. That will make
    ' the control try to use its default user name and
    ' password and you'll get the error again.
    inetFTP.Execute , "Get " & _
        txtRemoteFile.Text & " " & txtLocalFile.Text

'    m_GettingDir = True
'    inetFTP.Execute , "Dir"
End Sub

Private Sub cmdUpload_Click()
Dim host_name As String

    Enabled = False
    MousePointer = vbHourglass
    txtResults.Text = "Working"
    txtResults.SelStart = Len(txtResults.Text)
    DoEvents

    ' You must set the URL before the user name and
    ' password. Otherwise the control cannot verify
    ' the user name and password and you get the error:
    '
    '       Unable to connect to remote host
    host_name = txtHost.Text
    If LCase$(Left$(host_name, 6)) <> "ftp://" Then _
        host_name = "ftp://" & host_name
    inetFTP.URL = host_name

    inetFTP.UserName = txtUserName.Text
    inetFTP.Password = txtPassword.Text

    ' Do not include the host name here. That will make
    ' the control try to use its default user name and
    ' password and you'll get the error again.
    inetFTP.Execute , "Put " & _
        txtLocalFile.Text & " " & txtRemoteFile.Text

'    m_GettingDir = True
'    inetFTP.Execute , "Dir"
End Sub

Private Sub inetFTP_StateChanged(ByVal State As Integer)
    Select Case State
        Case icError
            AddMessage "Error: " & _
                "    " & inetFTP.ResponseCode & vbCrLf & _
                "    " & inetFTP.ResponseInfo
        Case icNone
            AddMessage "None"
        Case icConnecting
            AddMessage "Connecting"
        Case icConnected
            AddMessage "Connected"
        Case icDisconnecting
            AddMessage "Disconnecting"
        Case icDisconnected
            AddMessage "Disconnected"
        Case icRequestSent
            AddMessage "Request Sent"
        Case icRequesting
            AddMessage "Requesting"
        Case icReceivingResponse
            AddMessage "Receiving Response"
        Case icRequestSent
            AddMessage "Request Sent"
        Case icResponseReceived
            AddMessage "Response Received"
        Case icResolvingHost
            AddMessage "Resolving Host"
        Case icHostResolved
            AddMessage "Host Resolved"

        Case icResponseCompleted
            AddMessage inetFTP.ResponseInfo

            If m_GettingDir Then
                Dim txt As String
                Dim chunk As Variant

                m_GettingDir = False

                ' Get the first chunk.
                chunk = inetFTP.GetChunk(1024, icString)
                DoEvents
                Do While Len(chunk) > 0
                    txt = txt & chunk
                    chunk = inetFTP.GetChunk(1024, icString)
                    DoEvents
                Loop

                AddMessage "----------"
                AddMessage txt
            End If

       Case Else
            AddMessage "State = " & Format$(State)
    End Select

    Enabled = True
    MousePointer = vbDefault
End Sub
 
 
Copyright © 1997-2010 Rocky Mountain Computer Consulting, Inc.   All rights reserved.
  Updated