Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отловить ошибку при закачке с помощью WinInet


Автор: Desperate 9.1.2007, 22:42
Помогите! Я использую для закачки файла такую функцию
Код

function GetInetFile(const fileURL, FileName: String): boolean;
const BufferSize = 2048;
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;



Часто случается что соединение разрывается, как мне это отловить и например вывести сообщение?

Автор: Matematik 9.1.2007, 23:09
Надо обрабатывать значения которые  возвращают ф-и InternetOpenURL() и InternetReadFile()


Автор: Desperate 9.1.2007, 23:13
Как? И какие они значения возвращают?

Автор: Snowy 9.1.2007, 23:17
Примерно так:
Код

  if not InternetReadFile(hURL, @Buffer,SizeOf(Buffer), BufferLen) then 
  begin
    SetLength(sAppName, MAX_PATH);
    InternetReadFile(hURL, pointer(sAppName), MAX_PATH, BufferLength);
    MessageBox(0, PChar(sAppName), 'Error', MB_ICONERROR);
    Break;
  end;
Код не проверял.

Добавлено @ 23:19 
Цитата(Desperate @  9.1.2007,  23:13 Найти цитируемый пост)
И какие они значения возвращают?
true или false, в зависимости от того, получилось выполнить или нет smile

Автор: Matematik 9.1.2007, 23:19
Цитата(Desperate @  9.1.2007,  23:13 Найти цитируемый пост)
Как? И какие они значения возвращают? 

MSDN и еще раз MSDN
Цитата

InternetReadFile
Return Values
Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError. An application can also use InternetGetLastResponseInfo when necessary.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)