2013-04-12 2 views
2

Я кодирую приложение, которое загружает файл на удаленный FTP-сервер. Это мой код, который уже работает.Загрузка FTP ProgressBar в VB.NET

clsrequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 

Dim bFile() As Byte = System.IO.File.ReadAllBytes(rutaorigen) 

Dim clsStream As System.IO.Stream = clsrequest.GetRequestStream() 

clsStream.Write(bFile, 0, bFile.Length) 

clsStream.Close() 
clsStream.Dispose() 

Теперь я хочу, чтобы показать прогресс в ProgressBar в VB.NET.

Файлы не слишком большие (макс. 10 МБ).

Я уже пробовал пример, который я нашел здесь, но это не сработало.

Надеюсь, вы можете мне помочь. Благодаря!

+0

Какой пример вы пытались, и почему она не работает ? – LarsTech

+0

Это было от YouTube: http://www.youtube.com/watch?v=GUyEHiJTkRg Это как то, что я хочу сделать, но не совсем –

ответ

-1

Я получил это от примера давным-давно. Кодекс должен быть легко изменен для ваших нужд.

Dim clsRequest As System.Net.FtpWebRequest = _ 
     DirectCast(System.Net.WebRequest.Create(ServLabel.Text & TextBox1.Text), System.Net.FtpWebRequest) 

    clsRequest.Credentials = New System.Net.NetworkCredential(PassLabel.Text, UserLabel.Text) 
    clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 
    rfshTMR.Enabled = True 
    Dim File() As Byte = System.IO.File.ReadAllBytes(txtFile.Text) 
    Dim clsStream As System.IO.Stream = _ 
     clsRequest.GetRequestStream() 
    clsStream.Write(File, 0, File.Length) 
    For offset As Integer = 0 To File.Length Step 1024 
     ToolStripProgressBar1.Value = CType(offset * ToolStripProgressBar1.Maximum/File.Length, Integer) 
     Dim chunkSize As Integer = File.Length - offset - 1 
     If chunkSize > 1024 Then chunkSize = 1024 
     clsStream.Write(File, offset, chunkSize) 
     ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum 
    Next 
    clsStream.Close() 
    clsStream.Dispose() 
    MsgBox("File Is Now In Database", MsgBoxStyle.OkOnly, "Upload Complete") 
+0

Привет, ребята, все еще не могу заставить его работать. Нужно ли мне выполнять многопоточность? Спасибо –

+0

Этот код работает для меня, убедитесь, что у вас нет очевидных ошибок. И да, многопоточность - хорошая идея. – Kraxed

+0

Почему 'ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum' находится внутри цикла? Я думаю, что он должен быть снаружи и после цикла. – SysDragon

0

Простой прогресс на консоли:

Dim request As WebRequest = 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 buffer As Byte() = New Byte(10240 - 1) {} 
    Dim read As Integer 
    Do 
     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 прогресс GUI:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    ' Run Upload on background thread 
    Task.Run((Sub() Upload())) 
End Sub 

Sub Upload() 
    Dim request As WebRequest = 
     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() 
     ProgressBar1.Invoke(Sub() ProgressBar1.Maximum = fileStream.Length) 
     Dim buffer As Byte() = New Byte(10240 - 1) {} 
     Dim read As Integer 
     Do 
      read = fileStream.Read(buffer, 0, buffer.Length) 
      If read > 0 Then 
       ftpStream.Write(buffer, 0, read) 
       ProgressBar1.Invoke(Sub() ProgressBar1.Value = fileStream.Position) 
      End If 
     Loop While read > 0 
    End Using 
End Sub 

enter image description here

Смежные вопросы