Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
10 / 10 / 2
Регистрация: 03.01.2013
Сообщений: 73
1

Закачка файла через WinInet вешает программу

28.01.2014, 19:57. Показов 1517. Ответов 4
Метки нет (Все метки)

Пользуюсь такой функцией для закачки файлов:
Delphi
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
29
30
31
32
33
function DownloadFile(const fileURL, FileName: string): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: file;
  sAppName: string;
begin
  Result := False;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName),
  INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen);
      until
        BufferLen = 0;
      CloseFile(f);
      Result := True;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;
Файлы скачиваются идеально, но проблема в том, что во время закачки программа виснет и не отвечает. Есть мысль, чтобы вызывать функцию в отдельном потоке, но я не знаю как. Может быть использовать другой модуль и другую функцию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2014, 19:57
Ответы с готовыми решениями:

Закачка файла через TidFTP
День добрый уважаемые гурру. Необходимо на FTP загрузить файлы. Ниже описанным текстом работаю с...

Закачка файла на FTP сервер через VB
Помогите ПЛИЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ!!!!!!!!!!! Как закачать файл на сайт, где адрес www.adres.ru, юзернейм...

OpenFileDialog вешает программу
Всем добрый день. Начал осваивать для себя/работы/курсовой С#. И столкнулся с проблемой, что не...

Код вешает программу
Опыта у меня не много, по-этому и не знаю где накосячил, а может и совсем неправильно... Нужно с...

__________________
4
2646 / 2269 / 278
Регистрация: 24.12.2010
Сообщений: 13,725
29.01.2014, 13:03 2
Либо в доп.потоке читай документ либо в основном с использованием InternetReadFileEx - она предоставляет возможность асинхронного чтения.

Либо одновременно и то и другое пользуй, если доп.поток будет озабочен чем-то еще важным, кроме собственно чтения документа.
0
10 / 10 / 2
Регистрация: 03.01.2013
Сообщений: 73
29.01.2014, 15:17  [ТС] 3
Цитата Сообщение от mss Посмотреть сообщение
с использованием InternetReadFileEx
Заменил InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); на InternetReadFileEX(hURL, @Buffer, SizeOf(Buffer), BufferLen);, приложение все равно зависает. Можете тогда объяснить, как вынести эту функцию в дополнительный поток?
0
2646 / 2269 / 278
Регистрация: 24.12.2010
Сообщений: 13,725
29.01.2014, 17:03 4
Цитата Сообщение от sahar Посмотреть сообщение
Заменил InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); на InternetReadFileEX
"С использованием" вовсе не означает тупо-безмозгло добавить две буковки в конце имени функции.
Открывай описание InternetReadFileEX и читай. Читай и вникай в чем ее принципиальное отличие от InternetReadFile.
0
10 / 10 / 2
Регистрация: 03.01.2013
Сообщений: 73
29.01.2014, 21:18  [ТС] 5
http://msdn.microsoft.com/en-u... 85%29.aspx Судя по информации оттуда, вызывать надо так: InternetReadFile(hURL, INTERNET_BUFFERS, IRF_ASYNC, DWORD_PTR). Разъясните пожалуйста, с какими параметрами создавать переменные типа INTERNET_BUFFERS и DWORD_PTR. Есть вероятность, что я даже совсем не то читаю...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2014, 21:18

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

DDL-ка вешает программу
Привет всем, снова я ... Случилось следующее, создал процедуру в длл, гружу ее из программы,...

HttpClient PostAsync не отвечает и вешает программу
Здравствуйте, никак не могу решить образовавшуюся проблему, очень надеюсь на вашу помощь. Суть...

Закачка файлов через Opera
Здраствуйте! Недавно решил обновить браузер Opera до версии 10.60. До обновления стояла Opera...

Загрузка изображения в память через WinInet
Как загрузить изображение с url в Stream, а потом в Image на WinInet ? На Indy делал так: var ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.