Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как скачать файл с интернета [D7, WinXP]


iudjen ©   (2004-03-28 16:12:00) 

как скачать файл с интернета и как сделать так чтоб он закачивал в определенную папку.


vuk   (2004-03-28 22:21:00) [1]

Код может быть немного не доведен до ума, но если не заморачиваться с аутентификацией на прокси, то примерно так:

function ErrorMessageFromWinINet(ErrorCode: Integer): string;
var
 Len: Integer;
 Buffer: array[0..255] of Char;
 Module: HModule;
begin
 Module := GetModuleHandle('wininet.dll');
 Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE or
   FORMAT_MESSAGE_ARGUMENT_ARRAY, pointer(Module), ErrorCode, 0, Buffer,
   SizeOf(Buffer), nil);
 while (Len > 0) and (Buffer[Len - 1] in [ #0..#32, '.']) do Dec(Len);
 SetString(Result, Buffer, Len);
end;

function GetLastInetError: string;
var
 Buff: string;
 SysError, Error, Bytes : cardinal;
begin
 SysError := GetLastError;
 Result := ErrorMessageFromWinINet(SysError);
 if Result = '' then
   Result := 'Не удалось получить информацию об ошибке';
end;

function GetInetFile(const fileURL, FileName: String;
 var ErrorInfo: string): boolean;
const BufferSize = 1024;
var
 hSession, hURL: HInternet;
 Buffer: array[1..BufferSize] of Byte;
 BytesRead: DWORD;
 sAppName: string;
 Stream: TFileStream;
 AccessType: integer;

begin
 Result:=False;
 sAppName := ExtractFileName(Application.ExeName);
 AccessType := INTERNET_OPEN_TYPE_PRECONFIG;
   
 hSession := InternetOpen(PChar(sAppName), AccessType, nil, nil, 0);
 if hSession <> nil then
 begin
   try
     hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
     if hURL <> nil then
     begin
       try
         Stream := TFileStream.Create(FileName, fmCreate);
         try
           repeat
             Result := InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BytesRead);
             if Result then
               Stream.Write(Buffer, BytesRead)
             else
               ErrorInfo := GetLastInetError;
           until (not Result) or (BytesRead = 0);
         finally
           Stream.Free;
         end;
       finally
         InternetCloseHandle(hURL);
       end;
     end else
       ErrorInfo := GetLastInetError;
   finally
     InternetCloseHandle(hSession);
   end;
 end else
   ErrorInfo := GetLastInetError;
end;


Sergey Masloff   (2004-03-28 16:42:00) [2]

На сайте http://www.podgoretsky.comесть замечательный документ по работе с WinInet API где есть и ответ на твой вопрос. Советую ознакомиться.
Ищи в разделе /inet.html
прямую ссылку специально не даю - там много интересного, посмотри.


iudjen   (2004-03-28 16:13:00) [3]

я скачал какой-то исходник но там компонент какойто нужен


Наверх

Титульная страница Поиск, карта сайта Написать письмо