Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Помогите пожалуйста по VB

Ответить
Настройки темы
VBS/WSH/JS - Помогите пожалуйста по VB

Пользователь


Сообщения: 144
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
        ' Получить асинхронно
        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
Сам в этом не сильно разбираюсь.

Отправлено: 14:00, 16-08-2015

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Помогите пожалуйста по VB

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - помогите, пожалуйста по питону r-studio Программирование и базы данных 9 01-09-2014 12:50
VPN - [решено] VPN - Помогите пожалуйста настроить удалённое подключение По RAdmin. BROTHERHOOD Сетевые технологии 11 26-01-2011 09:22
Помогите с вопросом по информатике пожалуйста :) Megacucumber Флейм 5 04-11-2009 16:44
Помогите пожалуйста по Восстановлению EFS! Andrey_MAP Microsoft Windows 2000/XP 6 17-07-2006 14:35




 
Переход