1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| function TFormMaj.TelechargerFichier(const szFichierSource, szFichierDest: String; out szErreur: String): Boolean;
var
szSource: String;
nIndex, nTailleCopiee: Integer;
hsession : HINTERNET;
nTailleFichier, nTailleTransferee: Int64;
hUrlFile: HINTERNET;
F: File;
Buffer: Array[1..1024] of Byte;
nTailleLue: Cardinal;
begin
Result := False;
szSource := LowerCase(ExtractFilePath(szFichierSource));
nIndex := Pos('\maj\', szSource);
if nIndex > 0 then
begin
szSource := Copy(szSource, nIndex + 5, Length(szSource));
szSource := StringReplace(szSource, '\', '/', [rfReplaceAll, rfIgnoreCase]);
// Connexion.
hSession := InternetOpen('serveurupdate', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
Gauge.Progress := 0; nTailleTransferee := 0; nTailleFichier := GetTailleFichier(szFichierSource);
// Ouverture du fichier.
hUrlFile := InternetOpenURL(hSession, PChar(_szURL + szSource + ExtractFileName(szFichierSource)), nil, 0, 0, 0);
if Assigned(hUrlFile) then
begin
try
try
// Téléchargement du fichier.
AssignFile(F, szFichierDest);
try
{$I-}
Rewrite(F, 1);
{$I+}
if IOResult = 0 then
begin
repeat
// Copie du bloc.
if InternetReadFile(hUrlFile, @Buffer, SizeOf(Buffer), nTailleLue) then
begin
BlockWrite(F, Buffer, nTailleLue, nTailleCopiee);
...
end;
until(nTailleLue = 0) or (nTailleCopiee <> Integer(nTailleLue));
end;
finally
CloseFile(F);
end;
except
on E: Exception do
begin
szErreur := 'Échec téléchargement (InternetReadFile): ' + E.Message;
Exit;
end;
end;
Result := True;
finally
InternetCloseHandle(hUrlFile);
end;
end;
end
else
szErreur := 'Échec connexion (InternetOpen): ' + SysErrorMessage(GetLastError);
finally
InternetCloseHandle(hSession);
end;
end
else
szErreur := 'Erreur : chemin [' + szFichierSource + '] incorrect !';
end; |
Partager