AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [Patcher] Dateien vergleich / ersetzten / downloaden
Thema durchsuchen
Ansicht
Themen-Optionen

[Patcher] Dateien vergleich / ersetzten / downloaden

Ein Thema von Tazuchi · begonnen am 23. Mai 2010 · letzter Beitrag vom 24. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Tazuchi
(Gast)

n/a Beiträge
 
#1

[Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 14:32
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? ) 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 )
Pfad:=ExtractFilePath(Application.ExeName); Grüße Tazu.

Edit: Der Ordner bewegt sich um die Größe 500MB - 1GB
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 15:00
Wenn du nur MD5 brauchst, gibt es hier z.B. eine md5.pas, die du verwenden kannst und mit
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 15:02
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Tazuchi
(Gast)

n/a Beiträge
 
#4

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 15:12
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
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 15:26
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)

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
  Mit Zitat antworten Zitat
Tazuchi
(Gast)

n/a Beiträge
 
#6

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 20:08
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.
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#7

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 20:10
Vielleicht solltest du dich erst mit den Delphi Grundlagen auseinander setzten? Wenn ich mir die Posts von die so durchlese
Lars
  Mit Zitat antworten Zitat
Tazuchi
(Gast)

n/a Beiträge
 
#8

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 20:16
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.
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#9

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 20:22
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
Lars
  Mit Zitat antworten Zitat
Tazuchi
(Gast)

n/a Beiträge
 
#10

Re: [Patcher] Dateien vergleich / ersetzten / downloaden

  Alt 23. Mai 2010, 20:24
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.. Nur wollt ich nicht alles hinschreiben.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:14 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