Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 20:44
So hab ichs gemacht Matze! Zwar kann es vorkommen, dass 2,3 vergebliche anfragen gesendet werden (ca. 2 sekunden pro anfrage) aber dat is ja egal...vielen dank an alle!

Grüße, Alleinherrscher

Für alle die, dies interessiert hab ich hier mal den Quelltext:

Delphi-Quellcode:
function HTTPFileExists(aURL: String): Boolean;
begin
  with TIdHTTP.Create(nil) do
  try
    try
      Head(aURL);
      Result := ResponseCode = 200;
    except
      Result := False;
    end;
  finally
    Free;
  end;
end;

Function TForm1.GetFileFromInet(Const fileURL, AFileNameToSave: String) : Boolean;
Const
  BufferSize = 1024;
Var
  sAppName: String;
  hSession, hURL: hInternet;
  buffer: Array[1..BufferSize] Of Byte;
  bufferLen: DWord;
  mem: TMemoryStream;
Begin
  Result := False;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, Nil, Nil, 0);
  If ( hSession <> Nil ) Then
  Begin
    Try
      hURL := InternetOpenURL(hSession, PChar(fileURL), Nil, 0, 0, 0);
      If ( hURL <> Nil ) Then
      Begin
        Try
          mem := TMemoryStream.Create;
          Repeat
            application.ProcessMessages;
            BufferLen := 0;
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
            mem.Write(buffer, bufferlen);
          Until bufferLen = 0;
          mem.SaveToFile(AFileNameToSave);
             
          mem.Free;
          Result := True;
        Finally
          InternetCloseHandle(hURL);
        End;
      End;
    Finally
      InternetCloseHandle(hSession);
    End;
  End;
End;

procedure TForm1.Button1Click(Sender: TObject);
var Fehler:boolean;
datei:textfile;
version:string;
StreamObject:tmemorystream;

begin

assignfile(datei,pfad+'version.txt');
reset(datei);
readln(datei,version);
closefile(datei);

memo1.lines.add('Version auf dem Rechner: '+version);

i:=strtoint(version);

memo1.lines.add('Suche nach neuster Version...');
while HTTPFileExists('http://...'+inttostr(i)+'.exe')=false do
begin
inc(i);
application.ProcessMessages;
end;
memo1.lines.add('neuste Version: '+inttostr(i));

if inttostr(i)<>version then begin
memo1.lines.add('Lade neue Version herunter. Bitte waren...');
GetFileFromInet('http://...'+inttostr(i)+'.exe',pfad+inttostr(i)+'.exe')
end
else begin
update:=False;
memo1.lines.add('Ihre Files sind auf dem neusten Stand.');
exit;
end;
update:=True;
memo1.lines.add('Download komplett. Starte Update...');
memo1.Lines.add('Befolgen Sie die Anweisungen auf dem Bildschirm...');
ShellExecute(hinstance,'open',pchar(inttostr(i)+'.exe'),nil,pchar(pfad),sw_show);

assignfile(datei,pfad+'version.txt');
rewrite(datei);
writeln(datei,inttostr(i));
closefile(datei);


end;
Gruß, Alleinherrscer
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat