Да, протокол FTP перезаписывает существующие файлы при загрузке.
Обратите внимание, что существуют более эффективные способы загрузки.
Самый простой способ загрузки двоичного файла на FTP-сервер с использованием .NET framework - это WebClient.UploadFile
:
Dim client As WebClient = New WebClient
client.Credentials = New NetworkCredential("username", "password")
client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", "C:\local\path\file.zip")
Если вам нужен больший контроль, который WebClient
не предлагает (например, шифрование TLS / SSL и т. Д.), Используйте FtpWebRequest
. Простой способ - просто скопировать FileStream
в поток FTP, используя Stream.CopyTo
:
Dim request As FtpWebRequest =
WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip")
request.Credentials = New NetworkCredential("username", "password")
request.Method = WebRequestMethods.Ftp.UploadFile
Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"),
ftpStream As Stream = request.GetRequestStream()
fileStream.CopyTo(ftpStream)
End Using
Если вам нужно отслеживать ход загрузки, вы должны скопировать содержимое по частям:
Dim request As FtpWebRequest =
WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip")
request.Credentials = New NetworkCredential("username", "password")
request.Method = WebRequestMethods.Ftp.UploadFile
Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"),
ftpStream As Stream = request.GetRequestStream()
Dim read As Integer
Do
Dim buffer() As Byte = New Byte(10240) {}
read = fileStream.Read(buffer, 0, buffer.Length)
If read > 0 Then
ftpStream.Write(buffer, 0, read)
Console.WriteLine("Uploaded {0} bytes", fileStream.Position)
End If
Loop While read > 0
End Using
Информация о прогрессе в графическом интерфейсе (WinForms ProgressBar
) приведена в примере C # по адресу:
Как показать индикатор выполнения для загрузки с помощью FtpWebRequest
Если вы хотите загрузить все файлы из папки, см. Пример C # в
Загрузка каталога файлов с использованием WebClient .