Войти

Показать полную графическую версию : Помогите пожалуйста по VB


by_gangster
16-08-2015, 14:00
В общем имеется код, который скачивает файл с интернета сначала в память, а потом в конце кладёт его в папку. После того как он его скачал все функции дальше работают нормально.


' Получить асинхронно
If WaitForDownload = False Then
thr = New Threading.Thread(AddressOf AsyncDownload)
thr.Start(myHttpWebResponse.GetResponseStream)

' Получить синхронно
Else
FileDownloading = True
Dim myStreamReader As New IO.BinaryReader(myHttpWebResponse.GetResponseStream)
Dim all As New System.Collections.Generic.List(Of Byte)
Do
' Собственно получения порции данных
Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize)
If bts.Length = 0 Then Exit Do
all.AddRange(bts)
' Вызов события Идет прием данных
ReceiveProgressInvoke(all.Count)
Loop
DownloadSuccess(all)
End If
End Sub
' Функция реализующая поток, который скачивайт файл порциями BufferSize
Sub AsyncDownload(ByVal stream As Object)
FileDownloading = True
Dim myStreamReader As New IO.BinaryReader(stream)
Dim all As New System.Collections.Generic.List(Of Byte)
Do
' Всякие Прерывания и Паузы потока
If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub
While DownloadPause
System.Windows.Forms.Application.DoEvents()
If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub
End While

' Собственно получения порции данных
Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize)
If bts.Length = 0 Then Exit Do
all.AddRange(bts)
' Вызов события Идет прием данных
ReceiveProgressInvoke(all.Count)
Loop
DownloadSuccess(all)
End Sub
Delegate Sub dDownloadSuccess(ByVal lst As System.Collections.Generic.List(Of Byte))
Sub DownloadSuccess(ByVal lst As System.Collections.Generic.List(Of Byte))
If Me.InvokeRequired Then
Dim d As New dDownloadSuccess(AddressOf DownloadSuccess)
Me.Invoke(d, New Object() {lst})
Else
' Собственно завершение загрузки
IO.File.WriteAllBytes(FlName, lst.ToArray)
ResultQuery = FlName

' Снимаем синхблок
FileDownloading = False

' Вызов события ПолученОтвет
RaiseEvent ReceivedResponse(Me, New EventArgs)
End If
End Sub

Есть ещё один код, тоже самое скачивает файл с интернета, но не в память, а сразу кладёт его в папку и качает, проблема этого кода в том что после того как он скачал не выполняются следующие операции.

Пишет ошибку.
Произошла непредвиденная ошибка. Невозможно обратится к файлу.
Проверьте правильность написания пути Ошибка: Недопустимый вызов или аргумент процедуры.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Открыть файл

' Поток в файл (объявление)
Dim fstr As New System.IO.FileStream(FlName, System.IO.FileMode.Create)
Dim dnl_size As Long = 0


'Открытие потока в файл
'fstr = System.IO.File.OpenWrite(FlName)
' Получить асинхронно
If WaitForDownload = False Then

fstr.Close()
thr = New Threading.Thread(AddressOf AsyncDownload)
thr.Start(myHttpWebResponse.GetResponseStream)

' Получить синхронно
Else
FileDownloading = True
Dim myStreamReader As New IO.BinaryReader(myHttpWebResponse.GetResponseStream)
Dim all As New System.Collections.Generic.List(Of Byte)
Do
' Собственно получения порции данных
Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize)
If bts.Length = 0 Then Exit Do
fstr.Seek(0, System.IO.SeekOrigin.End)
For Each bytevalue As Byte In bts
fstr.WriteByte(bytevalue)
fstr.Seek(0, System.IO.SeekOrigin.End)
dnl_size = dnl_size + 1
Next
'all.AddRange(bts)
' Вызов события Идет прием данных
ReceiveProgressInvoke(dnl_size)
Loop
DownloadSuccess2()
fstr.Close()
End If
End Sub
' Функция реализующая поток, который скачивайт файл порциями BufferSize
Sub AsyncDownload(ByVal stream As Object)
FileDownloading = True
Dim myStreamReader As New IO.BinaryReader(stream)
Dim all As New System.Collections.Generic.List(Of Byte)

Dim fstr As New System.IO.FileStream(FlName, System.IO.FileMode.Create)
Dim dnl_size As Long = 0

Do
' Всякие Прерывания и Паузы потока
If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub
While DownloadPause
System.Windows.Forms.Application.DoEvents()
If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub
End While
' Собственно получения порции данных
Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize)
If bts.Length = 0 Then Exit Do
fstr.Seek(0, System.IO.SeekOrigin.End)
For Each bytevalue As Byte In bts
fstr.WriteByte(bytevalue)
fstr.Seek(0, System.IO.SeekOrigin.End)
dnl_size = dnl_size + 1
Next

'all.AddRange(bts)
' Вызов события Идет прием данных
ReceiveProgressInvoke(dnl_size)
Loop
DownloadSuccess2()
fstr.Close()
End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '
Delegate Sub dDownloadSuccess(ByVal lst As System.Collections.Generic.List(Of Byte))
Sub DownloadSuccess2()
' Собственно завершение загрузки
ResultQuery = FlName
' Снимаем синхблок
FileDownloading = False

' Вызов события ПолученОтвет
RaiseEvent ReceivedResponse(Me, New EventArgs)

End Sub

Сам в этом не сильно разбираюсь.




© OSzone.net 2001-2012