Не качается файл. Я в шоке.

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

Не качается файл. Я в шоке.

Сообщение Rewizorr » 08.04.2011 (Пт) 1:30

Нужно скачать файл из интернета. Не ожидал, что в этом могут быть трудности, но они возникли... Допустим кидаем в форму следующий код:
Код: Выделить всё
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Event ErrorDownload(FromPathName As String, ToPathName As String)
Public Event DownloadComplete(FromPathName As String, ToPathName As String)

Public Function DownloadFile(FromPathName As String, ToPathName As String)
If URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0 Then
DownloadFile = True
RaiseEvent DownloadComplete(FromPathName, ToPathName)
Else
DownloadFile = False
RaiseEvent ErrorDownload(FromPathName, ToPathName)
End If
End Function
     
Private Sub Timer1_Timer()
Call DownloadFile("http://******.narod.ru/*********/*.***", "c:\1.*")

Файл-то скачивается. Да вот только один раз. Итак, файл скачался. Я залез на сайт и изменил файл на сайте. Но программа почему-то предлагает мне первоначальную версию файла. Такое ощущение, что прога его не скачивает из сети, а берет из своих закромов, чтобы не скачивать дважды тот же файл, не соображая, что файл надо все равно скачать, что он уже изменился. Что делать? Я пробовал очищать папку Темп, иногда это помогало, но сейчас вообще не пойму, где ее новые закрома. Беда еще в том, что надо, чтобы прога могла спокойно качать нужный файл нужное количество раз. ну не буду же я просить юзера очищать Темпы! Неужели нельзя сделать так, чтобы прога КАЧАЛА файл, а не СОВАЛА ОДНОИМЕННЫЙ. Помогите! Плиз!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Не качается файл. Я в шоке.

Сообщение Twister » 08.04.2011 (Пт) 9:39

Учимся работать с документацией:

URLDownloadToFile returns S_OK even if the file cannot be created and the download is canceled.


S_OK объявлена как:
Код: Выделить всё
#define S_OK                                   ((HRESULT)0L)

Т.е. твой код If URLDownloadToFile(...) = 0 Then DownloadFile = True, как минимум, неверно обрабатывает возвращаемые значения.

Теперь остаётся подумать, почему "file cannot be created". Нигде не написано, что URLDownloadToFile будет начинать скачивание, если файл уже существует. Значит, первым делом, нужно удалить имеющийся на диске файл. Если же эта функция ведёт себя "умно" и пытается перезатереть имеющийся файл, значит надо убедиться, что она может открыть его на запись.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не качается файл. Я в шоке.

Сообщение Хакер » 08.04.2011 (Пт) 18:37

Ревизор, подпись свою приведи в соответствие с правилами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rewizorr
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.03.2007 (Вс) 5:04

Re: Не качается файл. Я в шоке.

Сообщение Rewizorr » 08.04.2011 (Пт) 23:46

Twister писал(а):Учимся работать с документацией:

URLDownloadToFile returns S_OK even if the file cannot be created and the download is canceled.


S_OK объявлена как:
Код: Выделить всё
#define S_OK                                   ((HRESULT)0L)

Т.е. твой код If URLDownloadToFile(...) = 0 Then DownloadFile = True, как минимум, неверно обрабатывает возвращаемые значения.

Теперь остаётся подумать, почему "file cannot be created". Нигде не написано, что URLDownloadToFile будет начинать скачивание, если файл уже существует. Значит, первым делом, нужно удалить имеющийся на диске файл. Если же эта функция ведёт себя "умно" и пытается перезатереть имеющийся файл, значит надо убедиться, что она может открыть его на запись.

Я же кажется писал, что я удалял скачанный файл, но на его место приходил точно такой же вместо того, что уже находился на сервере. Кроме того приходит тот же файл, даже, если его сохранять каждый раз под новым именем.... Есть какой-нибудь код сохранения файла из сети, без попытки кодом подсунуть мне уже прежде скачанный файл?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Не качается файл. Я в шоке.

Сообщение iGrok » 09.04.2011 (Сб) 0:50

Ну значит смотри в сторону настроек кеширования.
Быстрый взгляд на выдачу гугла по запросу "URLDownloadToFile Cache" показал, что с настройками кэширования тут не всё так просто (ну или руки у всех, кто оказался в выдаче, кривые, что не менее вероятно), и самым простым способом будет добавление фейковой случайной get-переменной к запросу на файл.

Т.е. не
Call DownloadFile("http://******.narod.ru/*********/*.***", "c:\1.*")
а
Call DownloadFile("http://******.narod.ru/*********/*.***" & "?fakevar=" & Int(Rnd * 10000000), "c:\1.*")
Ну и не забыть перед эти вызвать Randomize.
label:
cli
jmp label

Rewizorr
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.03.2007 (Вс) 5:04

Re: Не качается файл. Я в шоке.

Сообщение Rewizorr » 09.04.2011 (Сб) 1:06

Чего-то никак... Тупо дает мне старый файл. Прочесал на винте, но теперь не могу даже найти, откуда он берет старую версию.... :cry:

Rewizorr
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.03.2007 (Вс) 5:04

Re: Не качается файл. Я в шоке.

Сообщение Rewizorr » 09.04.2011 (Сб) 1:18

Боюсь сглазить, но кажется, все-таки заработало... ))) :D Последний советчик - респект. :D

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Не качается файл. Я в шоке.

Сообщение Twister » 10.04.2011 (Вс) 19:22

Я же кажется писал, что я удалял скачанный файл
Это только кажется. Вот что ты писал на самом деле:
Я пробовал очищать папку Темп

DownloadFile("http://******.narod.ru/*********/*.***", "c:\1.*")

Так что извиняй - каков был вопрос, таков и ответ.


но сейчас вообще не пойму, где ее новые закрома
Если данные подсовываются откуда-то из локального кэша, то это всегда можно отследить: раз и два.
А я все практикую лечение травами...

GRAF
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 13.04.2011 (Ср) 17:04

Re: Не качается файл. Я в шоке.

Сообщение GRAF » 15.04.2011 (Пт) 10:25

Я думаю, что файл вам подсовывает из своего кэша сервер, к которому вы подключены. После первого скачивания файл сохраняется на сервере. При повторном скачивании файла с тем же именем он берется с вашего сервера, а не из интернета. А сколько времени файл хранится на вашем сервере зависит от его настроек. У меня была похожая проблема. Обратился к администратору сервера и все разрешилось.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Mail.ru [бот], Yandex-бот и гости: 53

    TopList