AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi HTTP Server -> genauen Dateinamen ermitteln?!
Thema durchsuchen
Ansicht
Themen-Optionen

HTTP Server -> genauen Dateinamen ermitteln?!

Ein Thema von alleinherrscher · begonnen am 2. Aug 2005 · letzter Beitrag vom 2. Aug 2005
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

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

HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 12:10
Hi, Leute! Sorry, dass ich euch schon wieder nerve!

Folgenes: ich möchte von einem HTTP Server eine Datei runterladen. Es handelt sich um Updates. Das updatefile ist folgendermaßen zusammengesetzt xxxx[fester-string-teil].exe (also beispielsweise 4212update.exe, 4817update.exe usw...) wobei xxxx theoretisch eine zahl von 0001 bis 9999 sein kann.
Wie kann ich vor dem download herausfinden, welche xxxx nummer bzw. welcher dateiname gerade aktuell ist, wenn ich nicht alle möglichkeiten von 1 bis 9999 ausprobieren möchte?

Gruß Alleinherrscher!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 12:33
Hi,

unter den geschilderten Randbedingungen würde ich mir die zuletzt geladene Nummer merken und beim nächsten Update-Versuch von dieser Nummer ausgehend suchen. Suchen heißt ja nicht, dass du gleich die ganze Datei laden musst. Du könntest erst eine Existenzprüfung machen um unnötige Ladevorgänge zu vermeiden.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 12:46
Thx soweit! Aber so eine Art Wildcat gibts nicht oder?

Also z.B. lade die Datei *update.exe oder liste alle dateien auf und gib sie mir in eine varriable die die spezifikation *.exe haben oder sowas?

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

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 17:58
Es geht schon noch um HTTP - oder? Keine wild cards. Ärgerlich ist das, wenn die Nummernfolge nicht lückenlos ist, weil du dann eventuell viele vergebliche Anfragen verschicken musst. Offensichtlich will der Betreiber der web site keine automatischen downloads unterstützen, sonst würde er die jeweils aktuelle Fassung des update files unter einem festen Namen anbieten.

Falls die updates auch über FTP angeboten werden, dann stehen dir beim FTP command LIST wild cards zur Verfügung. Aber würdest du damit viel gewinnen? Liegen denn wirklich Unmengen an Dateien im gleichen Verzeichnis neben den 10.000 update files? Werden diese update files nicht ohnehin schon in einem eigenen Verzeichnis gehalten?

Merkwürdig...

marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 19:21
updates unter gleichem Namen macht der Anbieter vermutlich nicht weil es dann immer wieder zu problem mit läuten kommt die ihren Cache nicht leeren. Resultat ist dann das leute immer wieder die gleiche Version "herunterladen" weil immer wieder die version aus dem cache genommen wird (ist kein theoretiches problem, hab ich selbst schon im support erlebt)

zum eigentlichen thema: Außer probieren wird nichts weiter übrig bleiben da http darauf beruht das man sagt "gib mir genau das" und bekommt dann auch genau das oder eben eine Fehlermeldung wenn es nicht existiert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
matze.de

Registriert seit: 30. Jul 2005
Ort: Bell(Eifel)
7 Beiträge
 
Delphi 7 Professional
 
#6

Re: HTTP Server -> genauen Dateinamen ermitteln?!

  Alt 2. Aug 2005, 19:50
Nimm ne *.txt die immer gleich heißt schreib in die File die neue Versionsnummer rein und hol dir die mit deinem Programm ab.. Warum einfach, wenns auch kompliziert geht?

mfg matze
Mathias
()_()
(O.o) This is Bunny. Copy Bunny into your signature to help him on
(> <) his way to world domination.
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz