Цитата(Pentium02 @ 20.6.2007, 15:19 ) | | А можно плз на примере? |
а самому подумать? 
примерно как-то так:
| Код | function GetInetFileSize(Const AURL: String): Integer; var HSession, HFile: HInternet; Buffer: array [1..20] of Char; BufferLen, Index: Cardinal; begin Result := 0; HSession := InternetOpen(NIL, INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0); If Assigned(HSession) Then Begin HFile := InternetOpenURL(HSession, PChar(AURL), NIL, 0, INTERNET_FLAG_RELOAD, 0); Index := 0; BufferLen := 20; If HttpQueryInfo(HFile, HTTP_QUERY_CONTENT_LENGTH, @Buffer, BufferLen, Index) Then Result := StrToInt(StrPas(@Buffer)); InternetCloseHandle(HFile); InternetCloseHandle(Hsession); End; End;
function DownloadFile(URLd, OutFile: string): Boolean; var F: File; ResumePos,BufferLen: DWORD; hSession, hURL: HInternet; Buffer: array[1..512] of Byte; lOk: boolean; lSize: integer; // lDownloadedSize: Cardinal; lStartTime: Cardinal; lSpeed: Integer; begin ResumePos:=0; AssignFile(F,OutFile); try if FileExists(OutFile) then begin Reset(f,1); ResumePos:=FileSize(F); Seek( F, FileSize(F) ); end else ReWrite( f, 1 ); hSession:= InternetOpen('p02downloader',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0); hURL := InternetOpenURL(hSession,PChar(URLd),nil,0,0,0); try //lSize:= GetInetFileSize(URLd); //получаю размер файла if ResumePos > 0 then InternetSetFilePointer(hURL,ResumePos,nil,0,0); lStartTime := GetTickCount; lDownloadedSize := 0; repeat IF not InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen) then begin //ShowMessage ('Произошел облом :('); exit; end;
BlockWrite(f, Buffer, BufferLen);
inc( lDownloadedSize, BufferLen ); lSpeed := lDownloadedSize / ((GetTickCount - lStartTime) * 1000) div 1024; //kB per sec //Application.Processmessages; until (BufferLen= 0); Result:=True; finally InternetCloseHandle( hSession ); InternetCloseHandle( hURL ); end; finally CloseFile(f); end; end;
|
дальше сам придумывай |