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
Comment Utility
Try opening and closing the response object for every file. Look at the following;

Author Comment

Comment Utility
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

Comment Utility
Nice to hear it worked for you.
Where are you?

Author Comment

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

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

762 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

9 Experts available now in Live!

Get 1:1 Help Now