Eu peguei um source code de um "Downloader" no site da macoratti e fiz umas modificações para um uso , preciso que se o arquivo exista continue o download, irei usar em outro programa mas to tentando modificar esse para ver como fazer.
O Downloader usa um filestream e cria o arquivo e o baixa e salva enquanto baixa se parar o down o arquivo fica pela metade, se fechar o programa o arquivo tambem fica onde estava baixando com os bytes que já tinham sido baixados, eu queria que quando tentasse baixar dnv o downloader lesse os bytes do arquivo e continuasse a baixá-lo de onde parou, com umas modificações consegui continuar a salvar o arquivo apenas adicionando os bytes a ele mas o down ultrapassa a qtd de bytes que deveria ter, tipo ele baixa o arquivo do começo mas invés de criar outro apenas aumenta, eu queria exatamente isso mas invés de o downloader ler o arquivo da net e baixa-lo totalmente, baixar da onde parou e adicionar os btyes ao arquivo já existente, abaixo um pouco das modificações, já fiz muitas e n deu kk ( criei um potão de pause do down que apenas pausa o Loop, não serve para dar "resume" após o programa ser fechado:
Pergunta
LordLuc
Eu peguei um source code de um "Downloader" no site da macoratti e fiz umas modificações para um uso , preciso que se o arquivo exista continue o download, irei usar em outro programa mas to tentando modificar esse para ver como fazer.
O Downloader usa um filestream e cria o arquivo e o baixa e salva enquanto baixa se parar o down o arquivo fica pela metade, se fechar o programa o arquivo tambem fica onde estava baixando com os bytes que já tinham sido baixados, eu queria que quando tentasse baixar dnv o downloader lesse os bytes do arquivo e continuasse a baixá-lo de onde parou, com umas modificações consegui continuar a salvar o arquivo apenas adicionando os bytes a ele mas o down ultrapassa a qtd de bytes que deveria ter, tipo ele baixa o arquivo do começo mas invés de criar outro apenas aumenta, eu queria exatamente isso mas invés de o downloader ler o arquivo da net e baixa-lo totalmente, baixar da onde parou e adicionar os btyes ao arquivo já existente, abaixo um pouco das modificações, já fiz muitas e n deu kk ( criei um potão de pause do down que apenas pausa o Loop, não serve para dar "resume" após o programa ser fechado:
Me.btDownload.Enabled = False
Dim theResponse As HttpWebResponse
Dim theRequest As HttpWebRequest
Try
theRequest = WebRequest.Create(Me.txtNomeArquivo.Text)
theResponse = theRequest.GetResponse
Catch ex As Exception
MessageBox.Show("Um erro ocorreu durante o download do arquivo. Possíveis causas :" & ControlChars.CrLf & _
"1) Arquivo não existe" & ControlChars.CrLf & _
"2) Erro no sevidor remoto ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Dim cancelDelegate As New DownloadCompletoSafe(AddressOf DownloadComplete)
Me.Invoke(cancelDelegate, True)
Exit Sub
End Try
Dim length As Long = theResponse.ContentLength
Dim safedelegate As New AlterarTextosSafe(AddressOf AlterarTextos)
Me.Invoke(safedelegate, length, 0, 0, 0)
Dim nRead As Integer
Dim speedtimer As New Stopwatch
Dim currentspeed As Double = -1
Dim readings As Integer = 0
If Dir(Me.whereToSave) <> "" Then
Dim writeStream2 As New IO.FileStream(Me.whereToSave, IO.FileMode.Open, IO.FileAccess.Read)
nRead = writeStream2.Length
writeStream2.Close()
End If
Dim writeStream As New IO.FileStream(Me.whereToSave, IO.FileMode.Append)
Do
If BackgroundWorker1.CancellationPending Then
Exit Do
End If
If Not Button1.Text = "Resume" Then
speedtimer.Start()
Dim readBytes(4095) As Byte
Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096)
nRead += bytesread
Dim percent As Short = (nRead / length) * 100
Me.Invoke(safedelegate, length, nRead, percent, currentspeed)
If bytesread = 0 Then Exit Do
writeStream.Write(readBytes, 0, bytesread)
speedtimer.Stop()
readings += 1
If readings >= 5 Then
currentspeed = 20480 / (speedtimer.ElapsedMilliseconds / 1000)
speedtimer.Reset()
readings = 0
End If
End If
Loop
theResponse.GetResponseStream.Close()
writeStream.Close()
If Me.BackgroundWorker1.CancellationPending Then
IO.File.Delete(Me.whereToSave)
Dim cancelDelegate As New DownloadCompletoSafe(AddressOf DownloadComplete)
Me.Invoke(cancelDelegate, True)
Exit Sub
End If
Dim completeDelegate As New DownloadCompletoSafe(AddressOf DownloadComplete)
Me.Invoke(completeDelegate, False)
Aguardo respostas.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.