Solved

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

Posted on 2007-11-17
4
649 Views
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..."

        Else

            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
 
 

                Do

                    If BackgroundWorker1.CancellationPending Then 'If user abort download

                        Exit Do

                    End If
 

                    speedtimer.Start()
 

                    Dim readBytes(4095) As Byte

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

                    nRead += bytesread

                    'ori

                    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)
 

                    speedtimer.Stop()
 

                    readings += 1

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

                        currentspeed = 20480 / (speedtimer.ElapsedMilliseconds / 1000)

                        speedtimer.Reset()

                        readings = 0

                    End If
 

                    'Close the streams
 

                Loop

                theResponse.GetResponseStream.Close()

                writeStream.Close()
 

            Next j
 

            Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

            Me.Invoke(completeDelegate, False)
 

        End If
 
 

        If Me.BackgroundWorker1.CancellationPending Then
 

            IO.File.Delete(Me.whereToSave)
 

            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
 

            Me.Invoke(cancelDelegate, True)
 

            Exit Sub
 

        End If
 

    End Sub

Open in new window

0
Comment
Question by:togo413
  • 2
  • 2
4 Comments
 
LVL 82

Accepted Solution

by:
hielo earned 500 total points
Comment Utility
Try opening and closing the response object for every file. Look at the following;
http://jstawski.com/archive/2007/02/22/downloading-multiple-files-from-an-ftp-using-wildcards.aspx
0
 

Author Comment

by:togo413
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.
0
 
LVL 82

Expert Comment

by:hielo
Comment Utility
Nice to hear it worked for you.
>tonight
Where are you?
0
 

Author Comment

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

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 (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
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