Это, безусловно, выполнимо либо с классами WebClient, либо с серией классов (Ftp) WebRequest / WebResponse - и я могу дать вам некоторый пример кода, если это необходимо - но если у вас нет какого-то конкретного бизнес-кейса для развертывания своего собственного чего-то вроде RSync будь лучшим выбором.
EDIT;
Маршрут WebClient является самым простым, но он не дает вам большого контроля;
Imports System.Net
...
Dim Client As New WebClient
Client.DownloadFile("ftp://ftp.example.com/Database.bak", "D:\Backups\Database.bak")
Если вы хотите немного больше контроля и управлять возобновлением FTP, то что-то вроде этого поможет;
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
Предполагается, что вы переходите с FTP -> локально. Имя пользователя / пароль могут быть предоставлены как в SourcePath так; FTP: // имя пользователя: password@ftp.mysite.co.uk
Надеюсь, это поможет.