![]() |
|
|
![]()
|
|
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Делаю программу, которая проверяет размер файла из интернета, но заметил странную особенность. Если запустить программу и сразу запросить размер файла, то мне программа ВСЕГДА выдает размер 2379, но стоит хоть раз скачать этот файл, то программа выдает истинный размер файла. Пробовал на многих файлах из интернета, всегда одно и тоже. Такое ощущение, что запрос где то кешируется и если в кеше нет информации о файле, то запрос возвращает любое число.
Код программы:
P.S. дома пробовал эту программу на DialUp все проходит нормально, все запросы нормально обрабатываются и программы выдает реальный размер файла сразу, а на работе стоит выделенка через корпоративный прокси. Как решить данную проблему??? -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Я сам разобрался.
Для того, что бы ответы от запросов нормально отображались, нужно использовать соответствующие флаги:
-------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Bima |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Опять столкнулся с этой проблемой.
Задача такая: через определенные промежутки времени проверять на сервере размер файла и если он изменился, то закачать его. код такой:
Если запустить программу, то она хорошо работает, пока не закачает новый файл, а потом всегда показывает один и тот же размер, даже если размер файла изменился на сервере. После долгих поисков, я нашел, что программа кеширует файлы в папку: c:\Documents and Settings\<имя пользователя>\Local Settings\Temporary Internet Files\Content.IE5\<произвольная папка>\файл Если во время работы программы удалять файл, то программа начинает работать, как только что ее запустили. Я бы может быть обошел это ограничение (удалял бы эти файлы), но система сама создает <произвольная папки> с неизвестным названием.. ну типа QH8O6I5R я попробовал другой код:
работает также (то есть до первого скачивания), только для внешних сайтов. Я для экспериментов использовал на соседнем компьютере web-сервер apache и туда поместил тестовый файл. Так вот, с этого сервера все нормально скачивается и определяется, а вот если я задаю внешний сервер (на narod.ru или какой другой), то программа работает до первого скачивания. я пробовал разные флаги в функции InternetOpenUrl (INTERNET_FLAG_NO_CACHE_WRITE, INTERNET_FLAG_RELOAD и их комбинацию), но ничего не помогает. Я предпологаю, что при больших задержках эта функция начинает кешировать. Может как нибудь убрать таймауты, что кеширования не было? Как мне убрать кеширование??? Это сообщение отредактировал(а) Bima - 2.2.2007, 13:57 -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
поробуй еще и INTERNET_FLAG_RESYNCHRONIZE с INTERNET_FLAG_PRAGMA_NOCACHE к тем двум добавить...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Попробовал. Не помогает
делал так:
Заметил еще одну закономерность. Иногда если не трогать кеш, программа начинает работать через 4 часа. То есть такое ощущение, что данные в кеше становятся не актуальны через 4 часа. Может быть то соединение, которое я создаю до команды URLDownloadToFile, не действуют на эту команду??? Посмотрел в MSDN, вроде привязок к текущему соединению нет. Может какой другой командой можно файл скачать??? Добавлено @ 14:01 P.S. забыл добавить, с локальным сервером Apache все работает нормально -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
а разве не через | эту вещь надо объединять? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
хм, это получяется если использовать или для объединения, то по логике вещей нужно читать так: использовать или INTERNET_FLAG_RELOAD или INTERNET_FLAG_NO_CACHE_WRITE и т.д. но если рассуждать с точки зрения математики, то если складывать побитно через "или" два числа 110 и 011 то получится 111, а если складывать по "и", то 010. Romikgy скорее всего ты прав, сейчас попробую проверить. -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
попробовал и "|" и "||" не помогает. Все равно в кэше появляются файлы. И программа не определяет правильно размер
-------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
достаточно INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE, причем второй не является необходимым.
файл в кэше, связанный с ресурсом, можно удалить так: DeleteUrlCacheEntry(MyURL.c_str()); |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Файл в кеше создается под именем не тем, с которым я качаю, а еще с префиксом [1], то есть если я качаю файл test.zip, то в кеше появляется файл test[1].zip или test[2].zip и т.д. -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
и что? - ты не заметил, что функция называется не DeleteFile, и что на вход функции дается не имя файла, а урл? |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Признаю, свою ошибку!!! Вставил, эту команду в программу, все заработало. Думаю, что тему можно считать закрытой. -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |