Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2009, 19:28   #1
ZeitGeist7
Пользователь
 
Регистрация: 02.02.2009
Сообщений: 54
По умолчанию проблема с функцией скачивания файла из интернета

с потоками я успешно разобрался(почти). но поток основал вот на этой функции:
Код:
Function  DownLoadRss(_LinkLoad, _SaveWay: string) : Boolean ;
 var F: File;
  BufferLen,SumSize: DWORD;
  hSession, hURL: HInternet;
  Buffer: array[1..1024] of Byte;

begin
 SumSize:=0;
//  ResumePos:=0;   //Инициализируемся
 AssignFile (F,_SaveWay);  //Свяжемся с файлом
 ReWrite(f,1);  // создадим
//Открыли сессию
 hSession:= InternetOpen('X-Kachalka',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
//И наш УРЛ
  hURL := InternetOpenURL(hSession,PChar(_LinkLoad),nil,0,0,0);

  try
    REPEAT //Качаем
      InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //Читаем буфер
      BlockWrite(f, Buffer, BufferLen); //Пишем в файл
    UNTIL BufferLen= 0;
  Result := true;
  except
   Result := false;
  end;
    InternetCloseHandle(hURL);
    Closefile(f);

 InternetCloseHandle(hSession);

end;
и у него такая проблема:
если программа запущена и функция используется первый раз то всё в порядке - файл закачивается и это чувствуется по затраченному времени и тому что программа занята.
но вот все последующие разы использования выкидывают такой фокус: файл (даже если он удалён) качается в разы быстрее, и он качается в том же виде что и первый раз( я качаю rss ленты и заметил этот фокус когда я посмотрел файл сразу после скачивания и сравнил с тем что был на сайте и спустя 3 часа. на сайте обновилось а вот "скачанный" файл нет).

и ещё: в оригинале примера этой функции была строка после
Код:
 BlockWrite(f, Buffer, BufferLen);
Application. Processmessages; <-Для чего это и что это?

Последний раз редактировалось ZeitGeist7; 27.02.2009 в 19:31.
ZeitGeist7 вне форума Ответить с цитированием
Старый 27.02.2009, 19:39   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Application. Processmessages
это нужно что приложение ждало пока обработаются все сообщения
его нужно оставлять вообщето
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2009, 19:43   #3
ZeitGeist7
Пользователь
 
Регистрация: 02.02.2009
Сообщений: 54
По умолчанию

ясно.

а по функции что не так?
ZeitGeist7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с вычислением количества дней в феврале функцией getTime(); Max0001 JavaScript, Ajax 1 05.12.2008 07:03
Проблема с функцией замены... dast Microsoft Office Excel 6 09.10.2008 20:30
проблема с функцией atoi Darw1n Общие вопросы C/C++ 2 08.10.2008 23:21
Контроль скачивания файлов kormax PHP 4 02.10.2008 15:39
codeblocks - проблема с функцией main() хиппан Общие вопросы C/C++ 2 04.01.2008 19:41