![]() |
[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:
Und beim verzeichnis diesen Befehl ( Ja der Patcher befindet sich 100% im Ordner des Clienten )
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;
Delphi-Quellcode:
Grüße Tazu.
Pfad:=ExtractFilePath(Application.ExeName);
Edit: Der Ordner bewegt sich um die Größe 500MB - 1GB |
Re: [Patcher] Dateien vergleich / ersetzten / downloaden
Wenn du nur MD5 brauchst, gibt es
![]()
Delphi-Quellcode:
den (string) MD5-Hash einer Datei ermitteln kannst.
Md5Print(Md5File(filename));
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:
Beim Update-Request sendest du diese Liste an ein Script auf dem Server (z.B. in php geschrieben), dieses
<?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> 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 |
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 ![]() |
Re: [Patcher] Dateien vergleich / ersetzten / downloaden
Zitat:
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 ;) |
Re: [Patcher] Dateien vergleich / ersetzten / downloaden
Zitat:
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:
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 :)
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 ? )?
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 :) |
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. |
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
|
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. |
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
|
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:
Falsch? Natürlich sind die anderen davor etc.. :D Nur wollt ich nicht alles hinschreiben.
uses
md5; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz