It s certainly doable with either the WebClient classes, or (Ftp)WebRequest/WebResponse series of classes - and I can give you some sample code if required - but unless you have some specific business case for rolling your own something like RSync may be the better choice.
EDIT;
The WebClient route is the simplest, but it doesn t give you much control;
Imports System.Net
...
Dim Client As New WebClient
Client.DownloadFile("ftp://ftp.example.com/Database.bak", "D:BackupsDatabase.bak")
If you want a bit more control, and to manage FTP resumes then something like this will do the trick;
Public Sub TransferFile(ByVal SourcePath As String, ByVal DestinationPath As String)
Dim SourceRequest As FtpWebRequest
Dim Buffer(4095) As Byte
Dim BytesRead As Integer
Assumes source is on FTP server...
SourceRequest = DirectCast(WebRequest.Create(SourcePath), FtpWebRequest)
SourceRequest.Method = WebRequestMethods.Ftp.DownloadFile
If we already have a local file, then resume from the end of it...
SourceRequest.ContentOffset = If(File.Exists(DestinationPath), New FileInfo(DestinationPath).Length, 0)
Assume destination file is local/UNC file. FileMode.Append will create a new file if one doesn t exist.
Using DestinationFile As New FileStream(DestinationPath, FileMode.Append, FileAccess.Write, FileShare.None)
Using SourceResponse As WebResponse = SourceRequest.GetResponse()
Using SourceStream As Stream = SourceResponse.GetResponseStream()
Do
BytesRead = SourceStream.Read(Buffer, 0, Buffer.Length)
DestinationFile.Write(Buffer, 0, BytesRead)
Calculate speed, progress, show to user/log, etc...
Loop While BytesRead > 0
End Using
End Using
End Using
End Sub
This assumes you re transferring from FTP -> local. Username/password can be supplied as in the SourcePath as so; ftp://username:password@ftp.mysite.co.uk
Hope this helps.