Подскажите по inet1.getchunk

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Подскажите по inet1.getchunk

Сообщение Stally » 19.12.2004 (Вс) 4:16

Проблема следующего характера:
написал прогу для скачивания файлов с инета (нужна своя, менеджер закачек не подходит).
Пользуюсь Inet1.OpenURL -ом. всё работает, файл качается.
Но нужно узнать процент скачанного файла. как я понял, для этого можно использовать getchunk.

ПОЖАЛУЙСТА! объясните максимально примитивно :) как:
1)получить размер файла с интернет-сервера
2)получить процент скачанного файла (я так понял, что можно грузить кусочками и сравнивать скачанный объём с размером файла в инете)

Пример есть в MSDN, но где писать ссылку на файл?
очень хотелось бы увидеть готовый код, если не будет сложно.

Помогите... очень-очень нужно, но мало чего понятно
Спасибо!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.12.2004 (Пн) 8:34

Советую поставить FlashGet и посмотреть логи, какие команды использует FlashGet для скачки, и какие ответы получает с сервера.
Lasciate ogni speranza, voi ch'entrate.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.12.2004 (Пн) 10:41

*) Для этого можно использовать не только FlashGet, но и Reget, и GetRight.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.12.2004 (Пн) 11:46

Э... Ну да. Я просто привык им пользоваться.
Lasciate ogni speranza, voi ch'entrate.

Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Сообщение Stally » 20.12.2004 (Пн) 19:30

эээ... а getchunk-ом то как пользоваться?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.12.2004 (Вт) 21:57

Stally писал(а):эээ... а getchunk-ом то как пользоваться?

Вот, короче, пример: (писалось на скорую руку)
Вложения
GetChunk.rar
(2.39 Кб) Скачиваний: 111
Изображение

Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Сообщение Stally » 23.12.2004 (Чт) 10:54

tyomitch
Спасибо большое!

Но это же только для текстовых файлов (string)

А как, например, картинку скачать?
просто если написать тип byte, тогда не понятно с размером... и как его в файл сохранять?

Я уже неделю пытаюсь в этом разобраться, уже голова пухнет, а толку никакого :?

надо чтобы:
1. скачать файл по ссылке из интернета (файлом может быть и картинка и архив и пр.)
2. во время скачивания нужно знать, сколько процентов закачано
3. нужно всё это сохранять в файл на жёстком диске.

пример, который в MSDN - не работает! Вернее у меня не получается сделать так, чтобы он заработал...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.12.2004 (Чт) 21:54

В String можно положить хоть текст, хоть картинку, хоть архив. И потом, в конце скачивания, положить на жёсткий диск.

А ещё, посмотри мой пример на http://bbs.vbstreets.ru/viewtopic.php?p=57727#57727
Изображение

Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Сообщение Stally » 26.12.2004 (Вс) 5:32

tyomitch

Извини, пожалуйста, но ты не мог бы добавить пару строк в тот программный код (который ты положил файликом, который "написан на скорую руку") чтобы файл (картинка) после скачивания сохранялся на диск...
Он мне не даёт ничего сохранять. всякую ерунду записывает и файл получается то по 0 байт то по 60-80 байт...

сделай пожалуйста из того кода код, с возможностью сохранять файл, и тогда моя проблема будет навсегда решена :)

Огромное спасибо!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.12.2004 (Вс) 18:26

Замени код в форме на этот:

Код: Выделить всё
Option Explicit
Dim Size As Long, Got As String

Private Sub Command1_Click()
Inet1.AccessType = icDirect
Inet1.Execute Text1.Text
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim s As String
If State = icResponseReceived Then
    If Size = 0 Then Size = Inet1.GetHeader("Content-length"): Label1 = "Всего: " & Size: DoEvents
    Do
        On Error GoTo Away
        s = Inet1.GetChunk(1024, icByteArray)
        If 0 = Len(s) Then Exit Do
        Got = Got & StrConv(s, vbUnicode)
        Label2 = "Получено: " & Len(Got)
        If Len(Got) = Size Then
            Open "output" For Output As 1
            Print #1, Got;
            Close 1
            Exit Do
        Else
            DoEvents
        End If
    Loop
Away:
End If
End Sub


Тогда загруженный файл будет сохраняться в файл "output".
Изображение

Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Сообщение Stally » 27.12.2004 (Пн) 4:33

Нда... такое я бы сам не написал...
Спасибо!

Только... теперь он кричит "Unable to complete request" на строчку:
Size = Inet1.GetHeader("Content-length")

при ссылке на любой файл...

Ведь одно и то же! почему в первом примере он раза со второго эту ошибку не выдавал, а тут вообще отказывается дальше идти...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2004 (Пн) 4:40

Не знаю прямо, я у себя проверял - всё работало :-|
Попробуй с http://mix.web.ur.ru/msvbvm60.zip , может это от сервера зависит? Я на этом проверял.
Изображение

Stally
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 19.12.2004 (Вс) 4:00

Сообщение Stally » 25.03.2005 (Пт) 3:45

Опять пришлось поднять старую тему.
С этим вопросом я, вроде, разобрался. Всем спасибо. Нопоявилась ещё одна проблема из той же оперы.
Есть код:

Option Explicit
Dim Size As Long, Got As String

Private Sub Command1_Click()
Dim q As String
Inet1.AccessType = icDirect
Inet1.Execute ("http://kirlit.narod.ru/fotos/cremea2003/big/karadag15_1.jpg")

End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim s As String
Dim i As Long
If State = icResponseReceived Then
If Size = 0 Then Size = Inet1.GetHeader("Content-length")
Label1 = "Всего: " & Size: DoEvents
Do
On Error GoTo Away
s = Inet1.GetChunk(1024, icByteArray)
If 0 = Len(s) Then Exit Do
Got = Got & StrConv(s, vbUnicode)
Label2 = "Получено: " & Len(Got)
If Len(Got) = Size Then
Open "output" For Output As 1
Print #1, Got;
Close 1
Exit Do
Else
DoEvents
End If
Loop
Away:
End If
End Sub


Если начинаем качать файл большого размера и с хорошего сайта на хорошей скорости (ссылка, которая в примере качается нормально, там ошибки не возникает. Надо другую ссылку), Lable2 начинает страшно глючить. Он не показывает фактическое число скачанных байт. Число в этом поле не поднимается выше 10000.
Причём, если делать в отладчике по шагам - всё наращивается замечательно. В итоге, думается, что поле просто не успевает адекватно обновляться вовремя.
Если скорость скачки около 4 киллобайт в сек. то поле должно обновиться 4 раза за секунду... вот и глюки. Если в строке
s = Inet1.GetChunk(1024, icByteArray)
заменить 1024 на, скажем, 5120, тогда поле обновляется более-менее адекватно, но всё же иногда начинает накапливать цифру с нуля снова...
Скажите, пожалуйста:
1. Я правильно понял суть проблемы? Поле глючит т.к. не успевает обновиться?
2. Как её избежать? как отображать верное число на любой скорости закачки?

Спасибо!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 167

    TopList