| |

Fortgeschrittene ProgrammierungRe: Dateigröße einer Datei auf einem Server ermitteln | |  | Autor: Hannes | Datum: 24.08.02 19:25 |
| gefunden unter http://www.shadoware.de
Sie benötigen erstmal ein bzw. zwei Steuerelemente; das Winsock Control und eventuell - je nach Belieben - eine "ProgressBar" aus den Microsoft Windows Common Controls. Die Erklärung zu den farblich hervorgehobenen Elementen finden SIe wie immer weiter unten:
Private mblnIsHeader As Boolean
Private mstrReturnHeader As String
Private mstrRequestHeader As String
Private bolUseProgressBar As Boolean
Private objProgressBar As Object
Private Sub Winsock1_Connect()
'Wenn Verbindung aufgebaut ist, Header senden
Winsock1.SendData mstrRequestHeader
End Sub
Private Sub DownloadFile(URL As String, Destination As String, Optional ProgressBarToUse As Object)
Dim strPureURL As String
Dim strServerAddress As String
Dim strServerHostIP As String
Dim strDocumentURI As String
Dim lngStartPos As Long
Dim lngServerPort As Long
'Prüfen, ob eine Fortschrittsleiste angegeben wurde
If Not ProgressBarToUse Is Nothing Then
bolUseProgressBar = True
Set objProgressBar = ProgressBarToUse
Else
bolUseProgressBar = False
End If
'Header schreiben
mstrRequestHeader = ""
strRequestTemplate = "GET _$-$_$- HTTP/1.0" & Chr(13) & Chr(10) & _
"Accept: image/gif, image/x-xbitmap, image/jpeg, " & _
"image/pjpeg, application/vnd.ms-powerpoint, " & _
"application/vnd.ms-excel, application/msword, " & _
"application/x-comet, */*" & Chr(13) & Chr(10) & _
"Accept-Language: en" & Chr(13) & Chr(10) & _
"Accept-Encoding: gzip , deflate" & Chr(13) & Chr(10) & _
"Cache-Control: no-cache" & Chr(13) & Chr(10) & _
"Proxy-Connection: Keep-Alive" & Chr(13) & Chr(10) & _
"User-Agent: SSM Agent 1.0" & Chr(13) & Chr(10) & _
"Host: @$@@$@" & Chr(13) & Chr(10)
'"http://" entfernen
strPureURL = Right(URL, Len(URL) - 7)
lngStartPos = InStr(1, strPureURL, "/")
If lngStartPos < 1 Then
strServerAddress = strPureURL
strDocumentURI = "/"
Else
strServerAddress = Left(strPureURL, lngStartPos - 1)
strDocumentURI = Right(strPureURL, Len(strPureURL) - lngStartPos + 1)
End If
strServerHostIP = strServerAddress
lngServerPort = 80
'URL in Header einsetzen
mstrRequestHeader = strRequestTemplate
mstrRequestHeader = Replace(mstrRequestHeader, "_$-$_$-", strDocumentURI)
mstrRequestHeader = Replace(mstrRequestHeader, "@$@@$@", strServerAddress)
mstrRequestHeader = mstrRequestHeader & Chr(13) & Chr(10)
'Zieldatei zum binären Schreiben öffnen
Open Destination For Binary Access Write As #1
mblnIsHeader = True
'Verbindung zum Server aufbauen
Winsock1.Connect strServerHostIP, lngServerPort
End Sub
Private Sub Winsock1_Close()
Winsock1.Close
'Datei schließen
Close #1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'Wenn Daten empfangen werden
Dim lngBytes As Long
Dim blnFoundHeadEndByte As Boolean
Dim b() As Byte
Dim b2() As Byte
Dim aryMyArray As Variant
Dim i As Long
Dim j As Long
Dim strChr As String
Winsock1.PeekData strTemp, vbString
If (mblnIsHeader) Then
'Header empfangen
Winsock1.GetData b(), vbByte, 350
mstrReturnHeader = StrConv(b(), vbUnicode)
For i = LBound(b) + 3 To UBound(b)
If (blnFoundHeadEndByte) Then
b2(j) = b(i)
j = j + 1
Else
If b(i - 3) = 13 And b(i - 2) = 10 And b(i - 1) = 13 And b(i) = 10 Then
ReDim b2(UBound(b) - i)
If UBound(b2) > 0 Then ReDim b2(UBound(b2) - 1)
blnFoundHeadEndByte = True
j = 0
End If
End If
Next i
'Dateigröße aus Header auslesen
strStart = InStr(1, mstrReturnHeader, "Content-Length: ") + Len("Content-Length: ")
strEnd = InStr(strStart, mstrReturnHeader, Chr(13))
'Eventuell das Maximum der Fortschrittsleiste auf die Dateiröße setzen
If bolUseProgressBar Then objProgressBar.Max = Mid(mstrReturnHeader, strStart, strEnd - strStart)
If (UBound(b2) > 0) Then
If bolUseProgressBar Then objProgressBar.Value = objProgressBar.Value + UBound(b2) + 1
Put #1, , b2()
End If
mblnIsHeader = False
Else
Winsock1.GetData b, vbByte
'Empfangene Daten in Datei schreiben
Put #1, , b()
'Eventuell Fortschrittsleiste aktualisieren
If bolUseProgressBar Then objProgressBar.Value = objProgressBar.Value + UBound(b) + 1
End If
End Sub |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|