Entwickler-Ecke

Dateizugriff - Vergleich von Dateigrößen und Ausführen einer .exe


Shadowdragon - Fr 18.04.03 18:32
Titel: Vergleich von Dateigrößen und Ausführen einer .exe
Hi!

Ich habe vor, ein Programm zu schreiben (schonmal gut so weit!).
Dieses Programm soll die Größe einer Datei, deren Pfad bereits angegeben ist (meinetwegen in dem String "pfad"), auslesen.
Nun wird per HTTP auf eine Datei auf einem Server zugegriffen und die Größe der beiden Dateien verglichen.

Auf Deutsch:
Ich habe eine Datei, die Spiel.exe heisst (als Beispiel).
Nun schreibe ich Änderungen daran und lade sie auf meinen Server hoch.
Jedesmal, wenn der Benutzer mein Programm ausführt, soll die Größe von Spiel.exe auf der Festplatte mit der auf dem Server verglichen werden.
Wenn die Dateigröße größer ist, soll Spiel.exe heruntergeladen werden (also ein Autopatcher sozusagen).

Fragen dazu:
1)
Wie sage ich meinem Programm, die Größe der Datei auszulesen (einerseits auf der Festplatte und dann auf dem HTTP-Server)?
2)
Welche Bedingungskette muss ich da nehmen? Beispiel:

Quelltext
1:
2:
3:
IF dateigrößeHD < dateigrößeServer THEN
  idhttp1.get(...)
else (...)

Wie bekomme ich die Dateigrößen jetzt in die Integers? ^__^ ja ich bin ein Noob, ich weiss!
3)
Ganz einfache Frage: Wie sage ich meinem Programm, dass es dann am Ende Spiel.exe ausführen soll?


So, viel Text, viele Fragen, Danke für jede Antwort ^_^

MfG

Shadowdragon


Hansi@OMG - Fr 18.04.03 19:57

Also Zu 1:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function GetFileSize(const AFileName: String): Integer;
var
  F: TSearchRec;
begin
  Result:=-1;
  if FindFirst(AFileName,faAnyFile,F)=0 then
  begin
    Result := F.Size;
    FindClose(F);
  End;
end;

Wird aufgerufen durch:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var Datei1,datei2 : integer;
      Pfad1, Pfad2 : string;
begin
  Datei1:=GetFileSize(pfad1);
  Datei2:=GetFileSize(pfad2);
if Datei1 > Datei2 then idhttp1.get(...) else (...);
end;

Hierbei wird auch gleich verglichen, du brauchst dann nur noch die Anweisungen einfügen, des machst aber bitte selber.


Zu 3:
Such mal im Forum nach 'shellexecute'.
Und nicht vergessen ShellAPI in uses oben einzutragen.
Genaueres wirst du schon finden.


Shadowdragon - Fr 18.04.03 19:58

Danke ^^ probier ich gleich mal aus!


ErnestoChe - Fr 18.04.03 20:12

Hi,

mal was grundsätzliches. eine grössere *.exe muss ja nicht immer neuere Version bedeuten. Daher würde ich anders vorgehen:

Lege deiner spiel.exe eine ini-Datei bei in der die Versionnummer steht. Des Weiteren sollte sich eine ini-Datei auf dem Server befinden in der die aktuelle versionsnummer des patches steht.

Dein Auto-Patcher lädt diese ini-Datei zuerst runter, liest sie aus, vergleicht sie mit der Versionsnummer aus der Ini-Datei die auf der Festplatte des Anwenders liegt. Wenn die version vom Server neuer ist wird dann der Patch runtergeladen.

Beispiele hierzu solltest Du eigentlich finden wenn du mal googelst.

MFG

- Ernesto -


Shadowdragon - Fr 18.04.03 20:17

Ja doch, das is eine gute Idee!

Aber bei mir langt das eigentlich, denn bei mir ist ne größere .exe IMMER ne neuere Version....

Schreib die Datei in QBASIC, und es kommt eigentlich immer nur was dazu.

Daher... :wink: