Muszę sprawdzić przy pobieraniu pliku:
- czy serwer jest aktywny
- czy plik na serwerze aktywnym istnieje
W przypadku, gdy serwer nie odpowiada lub plik nie istnieje na serwerze, ściąga mi się pusty plik "instalator.exe".
type
TPobieraniePliku = class(TThread)
protected
procedure Execute; override;
end;
var
Form1: TForm1;
PobieraniePliku: TPobieraniePliku;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := 'Rozpoczynanie...';
PobieraniePliku := TPobieraniePliku.Create(True);
PobieraniePliku.Resume;
end;
procedure TPobieraniePliku.Execute;
var
DownLoadFile: TFileStream;
begin
DownLoadFile := TFileStream.Create(ExtractFilePath(Application.Exename) + 'instalator.exe',fmCreate);
Form1.IdHTTP1.Get(Form1.Edit1.Text,DownLoadFile);
DownLoadFile.Free;
{Zakończenie wątku}
PobieraniePliku.Terminate;
end;
procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);
begin
if AWorkMode = wmRead then
begin
ProgressBar1.Max := AWorkCountMax;
ProgressBar1.Position := 0;
end;
end;
procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmRead then Label1.Caption := 'Pobrano !';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdHTTP1.Disconnect;
end;
procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Integer);
begin
if AWorkMode = wmRead then
begin
ProgressBar1.Position := AWorkCount;
Label1.Caption := 'Pobrano: ' + FloatToStrf(AWorkCount / 1024,ffFixed,100,0) + ' kB z: ' + FloatToStrf(ProgressBar1.Max / 1024,ffFixed,100,0) + ' kB';
end;
end;
Próbowałem w ten sposób:
procedure TPobieraniePliku.Execute;
var
DownLoadFile: TFileStream;
begin
{Pobranie pliku}
Form1.IdHTTP1.Head(Form1.Edit1.Text);
if Form1.IdHTTP1.Response.ContentLength > 0 then
try
DownLoadFile := TFileStream.Create(ExtractFilePath(Application.Exename) + 'instalator.exe',fmCreate);
Form1.IdHTTP1.Get(Form1.Edit1.Text,DownLoadFile);
DownLoadFile.Free;
except
on E: EIdException do
begin
//DownLoadFile.Free; <<<<<< tutaj chyba powinienem zwolnić zmienną w wyniku błędu ?
FormUpdate.Label1.Caption := 'Serwer zgłasza błąd "' + E.Message + '"';
end;
end;
{Zakończenie wątku}
PobieraniePliku.Terminate;
end;
Ale wątek nie wykonuje się i plik nie jest pobierany. Jak można to poprawić ?