[.NET] System.Net.FtpWebRequest Download Status

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Silentuser, 21. Juni 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 21. Juni 2011
    System.Net.FtpWebRequest Download Status

    Hi,

    irgendwie blick ich gerade nicht wirklich durch wie ich hier rechnen muss..
    Ich mach einen Dateidownload über FTP und würde mir den fortschritt gerne in einer Statusbar anzeigen lassen.

    Da FTP ja nicht die Dateigröße mitsendet hole ich mir die zuerst und setze das max. von der Statusbar.

    Code:
     Dim sizerequest As Net.FtpWebRequest = CType(Net.FtpWebRequest.Create(Connect.ftpConstr & Filepath), FtpWebRequest)
     sizerequest.Method = Net.WebRequestMethods.Ftp.GetFileSize
     sizerequest.Credentials = New Net.NetworkCredential(Connect.user, Connect.pw)
     Dim sizeresponse As Net.FtpWebResponse = CType(sizerequest.GetResponse(), FtpWebResponse)
    
     [COLOR="Blue"] StreamClient.ToolStripProgressBar1.Maximum = CInt(sizeresponse.ContentLength / 1024)[/COLOR]
     StreamClient.ToolStripProgressBar1.Step = 1

    hier erfolgt dann der Dateidownload

    Code:
    'Datei(herunterladen)
    
     Dim outputstream As New IO.FileStream("E:\test\blub.blub", IO.FileMode.CreateNew)
    
     Dim request As Net.FtpWebRequest = CType(Net.FtpWebRequest.Create(Connect.ftpConstr & Filepath), FtpWebRequest)
     request.Method = Net.WebRequestMethods.Ftp.DownloadFile
     request.UseBinary = True
     request.Credentials = New Net.NetworkCredential(Connect.user, Connect.pw)
     Dim response As Net.FtpWebResponse = CType(request.GetResponse(), FtpWebResponse)
     Dim stream As IO.Stream = response.GetResponseStream()
     ' Dim filesize As Long = response.ContentLength
     [COLOR="blue"]Dim bufferSize As Integer = 1000[/COLOR]
     Dim readcount As Integer = 0
     Dim buffer(bufferSize) As Byte
    
     readcount = stream.Read(buffer, 0, bufferSize)
    
     While readcount > 0
     outputstream.Write(buffer, 0, readcount)
     readcount = stream.Read(buffer, 0, bufferSize)
     [COLOR="blue"]StreamClient.ToolStripProgressBar1.PerformStep()[/COLOR]
     End While
    
     stream.Close()
     outputstream.Close()
     response.Close()
    aber irgendwie haut das mit der progressbar nicht so wirklich hin.
    Sie funktioniert zwar aber eben nicht richtig.
    Ich hab extra schon den Buffer auf eine gerade Zahl gestellt aber das hilft irgendwie nicht.

    Folgende Daten:

    Die Datei ist groß: 718892 KB (736145408 Byte)
    Und die Schleife läuft durch: 834509 Mal


    Wie muss ich hier richtig rechnen? Ich dachte eig. die Schleife läuft: Dateigröße / 1000 (+1 für den rest) mal durch (Weil der Strem Buffer ja 1000 groß ist)?
    Aber das stimmt ja nicht.

    Danke schonmal
     
  2. 21. Juni 2011
    AW: System.Net.FtpWebRequest Download Status

    Wenn du die Datei asychron lädst, kanns du das dafür vorgesehene Event nutzen: WebClient.DownloadProgressChanged Event (System.Net)
     
  3. 22. Juni 2011
    AW: System.Net.FtpWebRequest Download Status

    Hi,

    ist zwar nicht die lösung auf die Frage, aber eine alternative.

    Downloaden funktioniert so auch, aber leider bekomme ich mit e.TotalBytesToReceive immer -1 zurück und das. e.ProgressPercentage funktioniert auch nicht.

    Habe es jetzt aber mit einer kombination aus "erst Dateigröße abholen" und dann über den Webclient download hinbekommen, da die Funktion e.BytesReceived einwandfrei funktioniert.

    Leider habe ich jetzt aber nichts mehr womit ich den Download Vorgang abrechen kann, hatt dazu noch jemand ne idee?

    Edit:

    Geht hiermit:

    dim bla as new webclient

    bla.DownloadFileAsync(url, dest)

    bla.Cancelasync ()

    Closed
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.