Jump to content
shamat

[Delphi] Download Fisier

Recommended Posts

Posted

Salut

Dupa ce am vazut postul lui tw8 http://rstcenter.com/forum/viewtopic.php?t=8904 m-am gandit sa fac un tutorial asemanator, dar pentru Delphi, avand in vedere ca multora le este mai usor sa scrie un program in Delphi.

Pentru aceasta vom avea folosii o functie ce va avea ca parametri: adresa fisierului ce vrem sa-l downloadam si calea catre fisierul unde vrem sa-l salvam.

Functiile cu care vom realiza download-ul fisierului apartin de WinInet asa ca primul lucru este sa-l declaram in sectiunea uses.

Partea declarativa a functiei noastre va arata cam asa:


var
hSesiune, hURL: HInternet; //variabilele pt sesiune
Buffer: array[1..1024] of byte;
BufferLen: DWORD; // lungimea buffer-ului
f: file;
NumeApp: string; //aici vom salva numele aplicatiei noastre

Dupa ce am terminat cu declaratiile trecem la scrierea propriu-zisa a functiei:

Pentru inceput vom crea o sesiune folosind functia InternetOpen.

 NumeApp := ExtractFileName(Application.ExeName); //extragem numele aplicatiei noastre

hSesiune := InternetOpen(Pchar(NumeApp), INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);

Acum deschidem URL-ul cu functia InternetOpenUrl:

  hURL := InternetOpenUrl(hSesiune, Pchar(FileUrl), nil, 0, 0, 0 );

In momentul acesta avem realizata o conexiune catre fisierul ce dorim sa-l downloadam. Tot ce ramane de facut este sa il salvam.

Vom citii fisierul cu functia InternetReadFile si il vom scrie in fisierul local folosind procedura BlockWrite.

AssignFile(f, FileName); rewrite(f,1);
repeat
InternetReadFile(hUrl,@Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f,Buffer,BufferLen);
until BufferLen = 0;

In final tot ce mai avem de facut este sa inchidem fisierul in care am scris si sesiuniule deschide anterior.

  CloseFile(f);
Result:=true;
InternetCloseHandle(hUrl);
InternetCloseHandle(hSesiune);

Functia terminata arata cam asa:

function GetFile(const FileUrl, FileName: string): boolean;
var
hSesiune, hURL: HInternet;
Buffer: array[1..1024] of byte;
BufferLen: DWORD;
f: file;
NumeApp: string;
begin
NumeApp := ExtractFileName(Application.ExeName); //extragem numele aplicatiei noastre

hSesiune := InternetOpen(Pchar(NumeApp), INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
hURL := InternetOpenUrl(hSesiune, Pchar(FileUrl), nil, 0, 0, 0 );

AssignFile(f, FileName); rewrite(f,1);
repeat
InternetReadFile(hUrl,@Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f,Buffer,BufferLen);
until BufferLen = 0;
CloseFile(f);
Result:=true;
InternetCloseHandle(hUrl);
InternetCloseHandle(hSesiune);
end;

Pentru a folosii functia nu trebuie decat sa o apelam. De exemplu:

GetFile('http://www.site.com/fisier.exe', 'fisier.exe');

Acesta functie poate fi folosita de asemenea si pentru a salva sursa unei pagini web.

GetFile('http://www.google.com/index.html', 'Index Google.html');

Sper sa va fie de folos. :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...