Jump to content
shamat

[Delphi] Download Fisier

Recommended Posts

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. :)

Link to comment
Share on other sites

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...