Need help on HttpWebRequest ,HttpWebResponse coding urgent..... Cannot loop to download multiple files

Posted on 2007-11-17
Last Modified: 2013-11-26
Hi  all,

Please help. I cannot download the files in loop. !st loop work perfect. Second loop the process die at
length = theResponse.ContentLength . Plese help me correct my code. I check already, the loop no problem.
Public Sub ChangeTexts(ByVal length As Long, ByVal position As Integer, ByVal percent As Integer, ByVal speed As Double)

        Me.lblFileSize.Text = "File Size: " & Math.Round((length / 1024), 2) & " KB"

        Me.lblFileName.Text = "Downloading: " & filename

        Me.lblStatus.Text = "Downloaded " & Math.Round((position / 1024), 2) & " KB of " & Math.Round((length / 1024), 2) & "KB (" & Me.ProgressBar.Value & "%)"

        If speed = -1 Then

            Me.lblSpeed.Text = "Speed: calculating..."


            Me.lblSpeed.Text = "Speed: " & Math.Round((speed / 1024), 2) & " KB/s"

        End If

        Me.ProgressBar.Value = percent

    End Sub

    Private Sub backgroundwork()

        Dim ServerPath As String

        Dim strTargetPath As String

        Dim strDestinationPath As String

        strDestinationPath = Application.StartupPath & "\flash"

        ServerPath = "http://cckoay/file_manager_web/flash/merchant/"

        strTargetPath = ServerPath & strMerchant

        Dim countUpdatedFiles As Integer

        Dim j As Integer

        countUpdatedFiles = ds.Tables(0).Rows.Count

        If countUpdatedFiles > 0 Then

            countUpdatedFiles = countUpdatedFiles - 1

            'Creating the request and getting the response

            Dim theResponse As HttpWebResponse

            Dim theRequest As HttpWebRequest

            Dim err As String

            For j = 0 To countUpdatedFiles

                Dim length As Long

                filename = strTargetPath & "/" & ds.Tables(0).Rows(j)(0)

                whereToSave = strDestinationPath & "\" & ds.Tables(0).Rows(j)(0)


                Try 'Checks if the file exist


                    theRequest = WebRequest.Create(filename)

                    theResponse = theRequest.GetResponse

                    length = theResponse.ContentLength 'Size of the response (in bytes)

                Catch ex As Exception

                    MessageBox.Show("An error occurred while downloading file. Possibe causes:" & ControlChars.CrLf & _

                                    "1) File doesn't exist" & ControlChars.CrLf & _

                                    "2) Remote server error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

                    Me.Invoke(cancelDelegate, True)

                    err = ex.ToString()

                    Exit Sub

                End Try

                Dim safedelegate As New ChangeTextsSafe(AddressOf ChangeTexts)

                Me.Invoke(safedelegate, length, 0, 0, 0) 'Invoke the TreadsafeDelegate

                Dim writeStream As New IO.FileStream(Me.whereToSave, IO.FileMode.Create)

                'Replacement for Stream.Position (webResponse stream doesn't support seek)

                Dim nRead As Integer

                nRead = 0

                'To calculate the download speed

                Dim speedtimer As New Stopwatch

                Dim currentspeed As Double = -1

                Dim readings As Integer = 0


                    If BackgroundWorker1.CancellationPending Then 'If user abort download

                        Exit Do

                    End If


                    Dim readBytes(4095) As Byte

                    Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096)

                    nRead += bytesread


                    Dim percent As Short = (nRead * 100) / length

                    Me.Invoke(safedelegate, length, nRead, percent, currentspeed)

                    If bytesread = 0 Then Exit Do

                    writeStream.Write(readBytes, 0, bytesread)


                    readings += 1

                    If readings >= 5 Then 'For increase precision, the speed it's calculated only every five cicles

                        currentspeed = 20480 / (speedtimer.ElapsedMilliseconds / 1000)


                        readings = 0

                    End If

                    'Close the streams




            Next j

            Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

            Me.Invoke(completeDelegate, False)

        End If

        If Me.BackgroundWorker1.CancellationPending Then


            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

            Me.Invoke(cancelDelegate, True)

            Exit Sub

        End If

    End Sub

Open in new window

Question by:togo413
  • 2
  • 2
LVL 82

Accepted Solution

hielo earned 500 total points
ID: 20304471
Try opening and closing the response object for every file. Look at the following;

Author Comment

ID: 20305108
You are my lucky star. I solve this nearly 2 nite d.
Thanks hielo.

I got close theResponse.GetResponseStream.Close() after every loop.
But din theResponse.Close

After add in, it works perfect.
LVL 82

Expert Comment

ID: 20305153
Nice to hear it worked for you.
Where are you?

Author Comment

ID: 20305347
Me  haha office lo. Me from Malaysia, now in Kuala Lumpur office. now is midnite 4:40 am

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

It’s quite interesting for me as I worked with Excel using for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now