Hallo,
Ik heb in VB6 een programma geschreven welk een gecodeerd tekstbestand uitleest en de daarin genoemde bestanden van een FTP download.
Vanaf de meeste servers gaat dit prima. Echter nu is er een server waarbij de grootte van de bestanden niet correct is. Er wordt data bijbedacht. Ik heb met UltraCompare gekeken of er een aantoonbaar verschil is, maar er zit op schijnbaar willekeurige plekken extra witruimte in de data, waardoor rars niet uit te pakken zijn (unexpected end of archive).
De volgende code wordt gebruikt (ingekort):
Waarbij onder andere:
Dit laatste noem ik, omdat blijkt dat de filesize van een bestand na downloaden met mijn programma deelbaar blijkt door 2048 (wat wel logisch is), terwijl dat bij het goede bestand -gedownload met een gewone ftp client- niet het geval is. Ik dacht dit op te lossen door bijvoorbeeld te dimmen als String * 64 (size wel deelbaar door 64) maar dit mocht niet baten.
Het maakt niet uit of ik wel/niet passive mode heb aanstaan. Iemand enig idee hoe dit kan komen?
Ik heb in VB6 een programma geschreven welk een gecodeerd tekstbestand uitleest en de daarin genoemde bestanden van een FTP download.
Vanaf de meeste servers gaat dit prima. Echter nu is er een server waarbij de grootte van de bestanden niet correct is. Er wordt data bijbedacht. Ik heb met UltraCompare gekeken of er een aantoonbaar verschil is, maar er zit op schijnbaar willekeurige plekken extra witruimte in de data, waardoor rars niet uit te pakken zijn (unexpected end of archive).
De volgende code wordt gebruikt (ingekort):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _ vbNullString, vbNullString, 0) hConnection = InternetConnect(hOpen, FTP_Host, INTERNET_INVALID_PORT_NUMBER, _ FTP_User, FTP_Pass, INTERNET_SERVICE_FTP, nFlag, 0) F1 = FreeFile Open szFileLocal For Binary As F1 bDoLoop = True lTotalBytes = 0 lNumberOfBytesRead = 0 While bDoLoop sReadBuffer = vbNullString bDoLoop = InternetReadFile(hFile, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead) Put F1, , sReadBuffer lTotalBytes = lTotalBytes + lNumberOfBytesRead perc = Int(((lTotalBytes / 1024) / (FileSize / 1024)) * 100) lbltxt = Int(lTotalBytes / 1024) & "/" & Int(FileSize / 1024) & " KB" If (lblFile.Caption <> lbltxt) Then lblFile.Caption = lbltxt UpdateImage picKB1, lblFileP, perc If Not CBool(lNumberOfBytesRead) Then bDoLoop = False DoEvents Wend Close F1 |
Waarbij onder andere:
Visual Basic:
1
| Dim sReadBuffer As String * 2048 |
Dit laatste noem ik, omdat blijkt dat de filesize van een bestand na downloaden met mijn programma deelbaar blijkt door 2048 (wat wel logisch is), terwijl dat bij het goede bestand -gedownload met een gewone ftp client- niet het geval is. Ik dacht dit op te lossen door bijvoorbeeld te dimmen als String * 64 (size wel deelbaar door 64) maar dit mocht niet baten.
Het maakt niet uit of ik wel/niet passive mode heb aanstaan. Iemand enig idee hoe dit kan komen?
[ Voor 5% gewijzigd door Norckon op 03-11-2004 15:01 ]