Получите размер файла на FTP сервере и поставьте метку
Я пытаюсь получить размер файла, размещенного на сервере, и поместить его в "метку", в то время как "BackgroundWorker" работает в фоновом режиме. Я использую "Try", чтобы получить значение, однако значение ловится с первой попытки, после загрузки, если я нажму, чтобы попытаться получить его снова, то это сработает.
Примечание: индикатор выполнения также не работает с первой попытки.
Что я уже пробовал:
Private Sub BWorkerD_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BWorkerD.DoWork Dim buffer(1024) As Byte Dim bytesIn As Integer Dim totalBytesIn As Integer Dim output As IO.Stream Dim flLength As Integer ''TRY TO GET FILE SIZE'' Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePathD.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsernameD.Text, txtFTPPasswordD.Text) FTPRequest.Method = Net.WebRequestMethods.Ftp.GetFileSize flLength = CInt(FTPRequest.GetResponse.ContentLength) lblFileSizeD.Text = flLength & " bytes" Catch ex As Exception End Try ''PROGRESS BAR'' Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePathD.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsernameD.Text, txtFTPPasswordD.Text) FTPRequest.Method = WebRequestMethods.Ftp.DownloadFile Dim stream As IO.Stream = FTPRequest.GetResponse.GetResponseStream Dim OutputFilePath As String = txtSavePathD.Text & "\" & IO.Path.GetFileName(txtFilePathD.Text) output = IO.File.Create(OutputFilePath) bytesIn = 1 Do Until bytesIn < 1 bytesIn = stream.Read(buffer, 0, 1024) If bytesIn > 0 Then output.Write(buffer, 0, bytesIn) totalBytesIn += bytesIn lblDownloadedBytesD.Text = totalBytesIn.ToString & " bytes" If flLength > 0 Then Dim perc As Integer = (totalBytesIn / flLength) * 100 BWorkerD.ReportProgress(perc) End If End If Loop output.Close() stream.Close() Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub ''UPDATE EVERY PROGRESS - DONT WORK ON FIRST TRY'' Private Sub BWorkerD_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BWorkerD.ProgressChanged pBarD.Value = e.ProgressPercentage lblPercentD.Text = e.ProgressPercentage & " %" End Sub