Visual Basic 2005 http-download von Datei klappt nicht

cmprmsd

Lt. Commander
Registriert
Mai 2005
Beiträge
1.973
Hi
Ich will mir ein automatisiertes Programm schreiben, dass mit einem Klick eine Datei von nem Server runterlädt, entpackt und dann 2 ordner und einige dateien in einen anderen Ordner kopiert.
Die Datei ist im rarformat auf dem server, aber das Problem gehe ich später an.

Im moment habe ich das problem, dass die runtergeladene datei einfach zu klein ist oO
Also statusbar und alles ist da, aber am ende ist meine rar zu klein und lässt sich nicht öffnen.
Mit FF geladen = 53,2 KB (54.542 Bytes)
Mit dem programm = 26,4 KB (27.058 Bytes)
Als käme nur ein Teil der Datei an =/

Hier der code den ich zum download nutze (vbarchiv)

Imports System.Net
Imports System.IO
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub cmdDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDownload.Click
Dim dlg As New FolderBrowserDialog
Dim strFile As String
Dim strFolder As String

' falls keine URL angegeben, Vorgang abbrechen
If Label1.Text.Length = 0 Then Exit Sub

Dim strPathParts() As String = Label1.Text.Split("/")
strFile = strPathParts(strPathParts.GetUpperBound(0))
strFolder = "C:\"


' Download starten
cmdDownload.Enabled = False
Call DownloadItem(Label1.Text, strFile, strFolder)
cmdDownload.Enabled = True
ProgressBar1.Visible = False
End Sub

Private Sub DownloadItem(ByVal sURL As String, _
ByVal strFile As String, ByVal strFolder As String)

Dim webreq As HttpWebRequest
Dim webresp As HttpWebResponse
Dim bReader As BinaryReader
Dim bWriter As BinaryWriter
Dim stream As FileStream
Dim buffer() As Byte = New Byte(1024) {}
Dim bytesRead As Integer

' Fortschritt zunächst auf 0% setzen
Me.ProgressBar1.Value = 0

Try
' Datei-Download via HTTP "anfordern"
webreq = HttpWebRequest.Create(sURL)
webresp = webreq.GetResponse


' Download-Größe
Me.ProgressBar1.Maximum = webresp.ContentLength

' lokale Datei öffnen
stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
bReader = New BinaryReader(webresp.GetResponseStream)
bWriter = New BinaryWriter(stream)

' Datei blockweise downloaden und lokal speichern
Do
bytesRead = bReader.Read(buffer, 0, 1024)
bWriter.Write(buffer, 0, bytesRead)
ProgressBar1.Value += bytesRead
ProgressBar1.Update()

Loop Until bytesRead = 0

' alle Dateien schließen
bWriter.Close()
bReader.Close()
stream.Close()

Catch ex As Exception
' Bei Fehler...
MessageBox.Show("Fehler: " & vbCrLf & ex.Message, _
"Fehler", MessageBoxButtons.OK, _
MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
End Try
End Sub


End Class
Ich find den Fehler nicht


'puuuhuuush :>
 
Zuletzt bearbeitet:
Lass dir doch mal "webresp.ContentLength" ausgeben. So weißt du schon mal ob der Server auch alle Daten liefert.
Wenn die ContentLength stimmt könnte es noch am Schreibvorgang liegen. Füg doch mal vor dem "bWriter.Close()" noch
Code:
bWriter.Flush()
ein. Damit schreibst du die Daten sofort in die Datei.

Ich ich hab dir geholfen.

Grüße,
TheCadillacMan
 
"webresp.ContentLength" gibt mir als Größe auch 27089 Bytes an =/
Aber wenn ich es mit nem Explorer runterlade ist es größer und lässt sich öffnen.
Gleiche adresse nur halt mit browser funzt.

€dit:
bWriter.Flush() macht auch keinen Unterschied.
 
Zurück
Oben