Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Patcher] Dateien vergleich / ersetzten / downloaden (https://www.delphipraxis.net/151566-%5Bpatcher%5D-dateien-vergleich-ersetzten-downloaden.html)

Tazuchi 23. Mai 2010 13:32


[Patcher] Dateien vergleich / ersetzten / downloaden
 
Hallo Community,

Ich stehe vor dem Problem wie ich diese ganzen Datein ( Ich weiß die genauen NAMEN und diese ändern sich nicht! ) vergleich kann / ersetzten kann ( Eine Rechte Überprüfung ist schon drin! ) und wie ich sie dann Downloaden kann. Wenn ich jetzte zum bsp. wie mir schonmal vorgeschlagen wurde per MD5 Hash vergleiche ( Wie? :D ) wird dieser Hash dann auch geändert wenn sich die Größe ändert ? Bzw. will ich sowieso eher die Datein per Größe vergleichen lassen die Dateien vom Server und die Dateien auf dem PC des Nutzers. Der Nutzer wird die Dateien haben beim ersten Download des gesamten Clienten und soll später nicht immer alles Downloaden nur die veränderten Dateien. Wie stelle ich das am besten an?

Zum Schreibrechte prüfen hab ich das hier genommen:
Delphi-Quellcode:
function IsDirWritable(Dir: string): boolean;
var stream: TFileStream;
begin
  try
    stream := TFileStream.Create(Dir+'\test.dat',fmCreate);
    result := true;
    FreeAndNil(stream);
    DeleteFile(Dir+'\test.dat');
  except
    result := false;
    FreeAndNil(stream);
  end;
end;
Und beim verzeichnis diesen Befehl ( Ja der Patcher befindet sich 100% im Ordner des Clienten )
Delphi-Quellcode:
Pfad:=ExtractFilePath(Application.ExeName);
Grüße Tazu.

Edit: Der Ordner bewegt sich um die Größe 500MB - 1GB

blackfin 23. Mai 2010 14:00

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Wenn du nur MD5 brauchst, gibt es hier z.B. eine md5.pas, die du verwenden kannst und mit
Delphi-Quellcode:
Md5Print(Md5File(filename));
den (string) MD5-Hash einer Datei ermitteln kannst.
Ansonsten rate ich dir zum DEC, falls du noch mehrere Kryptografie-Algos brauchst.

Beim Ausliefern kannst du z.B. den Hash jeder Datei im Ordner in einer XML-Datei mitliefern, die z.B. in etwa so aufgebaut ist:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<HashFileList UID="{9AD5B6AB-6E4F-433B-AE57-D223D881AE5A}">
  <File>
    <Index>1</Index>
    <Hash>967905c64686d06d3bfebcc6cad32de6</Hash>
    <FileName>Projekt1.exe</FileName>      
  </File>
  <File>
    <Index>2</Index>
    <Hash>ff20037820420000746503382e20686f</Hash>
    <FileName>Data\daten.dat</FileName>      
  </File>
...
..
.
</HashFileList>
Beim Update-Request sendest du diese Liste an ein Script auf dem Server (z.B. in php geschrieben), dieses
vergleicht die Liste mit der aktuellen Hash-Liste der Dateien, die auch auf dem Server liegt und ermittelt so die Dateien, die ausgetauscht werden müssen.
Diese lädst du runter, ersetzt diese Dateien und ersetzt danach ebenso die aktuelle Hash-Liste mit der auf dem Server.
Wenn du es so machst, ersparst du es dem Client, jedesmal den kompletten Ordner hashen zu müssen, was bei 1GB doch einige Zeit dauern kann.
Mit der oben genannten Methode musst du nur immer die Dateien bei dir neu hashen, bevor du das Update auf den Server lädst.

grüssle,

Fin

Sir Rufo 23. Mai 2010 14:02

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Hash

Ein Hash liefert den Fingerabdruck von einer Datei. Gleicher Hashwert bedeutet also gleiche Datei (absolut gleich).
Somit brauchst du zunächst nur die Hashwerte der Dateien vergleichen.

Schreibrechte

Das prüfen von Schreibrechten nach try/error ist zwar eine Möglichkeit, besser geht es aber, wenn man die Schreibrechte für den Ordner und die Datei ausliest.
Schau mal hier, da ist eine Unit womit du das auslesen kannst.

Tazuchi 23. Mai 2010 14:12

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Zitat:

Zitat von blackfin
Beim Update-Request sendest du diese Liste an ein Script auf dem Server (z.B. in php geschrieben), dieses
vergleicht die Liste mit der aktuellen Hash-Liste der Dateien, die auch auf dem Server liegt und ermittelt so die Dateien, die ausgetauscht werden müssen.
Diese lädst du runter, ersetzt diese Dateien und ersetzt danach ebenso die aktuelle Hash-Liste mit der auf dem Server.
Wenn du es so machst, ersparst du es dem Client, jedesmal den kompletten Ordner hashen zu müssen, was bei 1GB doch einige Zeit dauern kann.

Erstmal danke für eure Antworten und komm dadurch auch noch weiter aber da ich begrenzt nur PHP kann ( Grundkenntnisse und da auch nur wenig ) falls du so ein Script erstellen kannst wäre das sehr nett ;) ?

Du sagtest ich solle diese 2 XML Dateien dann vergleichen die natürlich die Hashes auf dem Server beihnhalten und beim Clienten natürlich die vom Clienten. Nur müsste ich dann nicht ein extra Programm machen damit ich dann immer die Hashes bilde und gleichzeitig diese automatisch in eine XML schreiben lassen kann ( Wie mach ich das am besten ? )?

Grüße Tazu.

Edit: Rechtschreibfehler behoben ;)

blackfin 23. Mai 2010 14:26

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Zitat:

...falls du so ein Script erstellen kannst wäre das sehr nett.
Ich helfe gerne, wenn jemand bei etwas nicht weiterkommt, aber die Sprache zu lernen kann ich dir durch ein fertiges Script nicht abnehmen, das musst du verstehen.
Sorry, aber das ist hier ein Entwickler-Forum und kein "Ich schenke dir ein Programm"-Forum. Das ist jetzt nicht bös gemeint, aber es verfehlt halt den Sinn und Zweck dieses Forums, wenn man anderen einfach fertige Scripte gibt, was im Endeffekt nur dazu führt, dass derjenige, der die Frage gestellt hat, nachher nicht schlauer ist als vorher, was dieses Problem betrifft.
Du lernst doch nichts dabei, wenn du dich nicht selbst in die Sache reindenkst und beim nächsten Problem, bei dem du dann vielleicht wieder php brauchst, bist du wieder aufgeschmissen. Das ist eigentlich nicht Sinn und Zweck, oder :)
Du musst dafür auch nicht unbedingt php nehmen, die Wahl der Script-Sprache steht dir ja frei.
Es muss nur ein Programm / Script sein, dass auf dem Server läuft, Daten per GET oder POST annehmen kann und die XML-dateien vergleichen kann.
php biertet sich halt meiner Meinung nach dafür an, es geht aber mit zig anderen Sprachen genauso.
Ausserdem...php lernen ist einfacher als Delphi :) (meine Meinung)

Delphi-Quellcode:
Nur müsste ich dann nicht ein extra Programm machen damit ich dann immer die Hashes bilde und gleichzeitig diese automatisch in eine XML schreiben lassen kann ( Wie mach ich das am besten ? )?
Du kannst es entweder in das Programm selbst integrieren oder ein ganz kleines Extra-Programm zum Hash-Erstellen verwenden, das ist Geschmacksache und deine alleinige Entscheidung :)
Wie du die MD5-Hashes der Dateien ermittelst, habe ich dir ja bereits geschrieben.
Schreiben kannst du sie, indem du MSXML verwendest (XMLDoc,XMLIntf in die uses einbinden).
..und wie man XML-Dateien darüber schreibt, ist sicher über die Forensuche hier leicht zu ermitteln :)

Tazuchi 23. Mai 2010 19:08

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Hmmmkay ;) Ja das wollt ich auch nicht direkt. Naja aufjedenfall such ich grade wie ich die "md5.pas" in mein Programm einbinden kann? Wie genau muss das da stehen? Ich hab nur sozusagen "Müll" gefunden.

Grüße Tazu.

daywalker9 23. Mai 2010 19:10

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Vielleicht solltest du dich erst mit den Delphi Grundlagen auseinander setzten? Wenn ich mir die Posts von die so durchlese

Tazuchi 23. Mai 2010 19:16

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Ich hab bis jetzte keine anderen Unit's gebraucht und weise mich nicht daraufhin was ich machen soll! Ich kenn die Grundlagen nur wie gesgat hatte ich andere Units NIE gebraucht und man vergisst auch manschmal was das ist nur so -> Menschlich ;) Und da darf man doch mal nachfragen. Was anscheinend mansche Personen nicht verstehen. Desto trotz hab ich es wieder in meinen Unterlagen gefunden.

[Ironie an]Wobei deine antwort mir sehr geholfen hat[/Ironie aus]

Grüße Tazu.

daywalker9 23. Mai 2010 19:22

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Du hast bisher keine anderen Units benutzt? Was ist mit SysUtils, Windows, Math u.s.w ? Das sind auch Units die eingebunden werden müssen

Tazuchi 23. Mai 2010 19:24

Re: [Patcher] Dateien vergleich / ersetzten / downloaden
 
Okay, klar die schon xD Okay okay aber warum erkennt er die md5 Unit dann nicht an? Ich hab sie laut meiner angaben drin und ich kann aber immernoch keine Hashes von meinen Dateien erzeugen er erkennt es eifnach nicht? Mögliche Fehler?

Einbindung per:

Delphi-Quellcode:
uses
   md5;
Falsch? Natürlich sind die anderen davor etc.. :D Nur wollt ich nicht alles hinschreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr.
Seite 1 von 2  1 2      

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