AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi Patcher

Ein Thema von xReva · begonnen am 24. Apr 2017 · letzter Beitrag vom 24. Apr 2017
Antwort Antwort
xReva

Registriert seit: 15. Nov 2016
20 Beiträge
 
#1

Delphi Patcher

  Alt 24. Apr 2017, 11:26
Hey,


Ich versuche momentan über Delphi ein Programm zu schreiben das mir auf meinem PC die Dateien in dem Ordner wo das Programm liegt mit einem Ordner vergleicht der auf meinem Root Server liegt und dementsprechend die Dateien auf meinem PC Updatet.(Patcht). Da ich noch relativ neu in Delphi bin habe ich nicht wirklich einen guten Ansatz gefunden ich weiß nur das es wohl über Hash vergleiche funktionieren soll.

Ich hoffe mir kann hier damit weitergeholfen werden weil ich da schon eine Weile dran sitze allerdings nie etwas funktionsfähiges hinbekommen habe.

Mfg Lucas
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
926 Beiträge
 
#2

AW: Delphi Patcher

  Alt 24. Apr 2017, 11:38
Was möchtest du denn jetzt wissen?
Wie man eine Hash erzeugt?

Um eine Hash für eine Datei zu erzeugen, muss die komplette Datei gelesen werden. Das jedes Mal für alle Datei zu machen, wäre ja nicht unbedingt sinnvoll. Für die lokalen Dateien würde das ja noch gehen, aber für die Dateien auf dem Root-Server....naja. Ich kenn deine Anbindung nicht.
Möglichweise kannst du schon beim Ablegen zu jeder Datei auf dem Root-Server eine Textdatei mit dem dazugehörigen HASH-Wert ablegen, und den Hash nur daraus lesen.
Ansonsten bleibt ja nur de Weg über Dateiname, Dateigröße und FileDate.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Delphi Patcher

  Alt 24. Apr 2017, 11:43
Am sinnvollsten wäre die Dateiversion, allerdings geht das nur bei EXE und DLL.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
926 Beiträge
 
#4

AW: Delphi Patcher

  Alt 24. Apr 2017, 11:58
Am sinnvollsten wäre die Dateiversion, allerdings geht das nur bei EXE und DLL.
Sofern denn die Dateiversion sich immer verändert.
Hash wäre wohl der sicherste Weg.
  Mit Zitat antworten Zitat
xReva

Registriert seit: 15. Nov 2016
20 Beiträge
 
#5

AW: Delphi Patcher

  Alt 24. Apr 2017, 12:07
Danke für die schnellen Antworten.

Wie geschrieben habe ich keinen wirklichen Ansatz dafür ob ich das am besten über eine Hash mache oder anders.

Meine Frage währe halt wie würde ich so ein Programm am besten umsetzen und wo müsste ich dort anfangen bzw wie würde ich das am besten machen

Mfg Lucas
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
926 Beiträge
 
#6

AW: Delphi Patcher

  Alt 24. Apr 2017, 12:24
Die ersten Fragen die sich stellen sind:

1. Wie greifst du auf den Root-Server zu? (FTP, SMB, ...)
2. Mit welcher Bandbreite greifst du zu? (DSL 16mb/s oder LAN 100/1000 MB/s).
3. Kannst du den Inhalt auf dem Root-Server selbst festlegen, bzw. den/die Hashwert der Dateien ggf. schon beim Hochladen erstellen/speichern?

Erst dann kann man sich Gedanken über die Umsetzung machen, denn erst dann weiß man ggf. welche Vergleiche man überhaupt durchführen kann.

Wenn ich mal davon ausgehe, dass du den Inhalt auf dem Root-Server selber festlegen kannst, dann würde ich folgendes machen.
Ich würde mir beim Hochladen über jedes Verzeichnis für alle Dateien die Hashwert erzeugen und diese in eine Datei schreiben, die ebenfalls hochgeladen wird.
Beim Synchronisieren am Client würde ich dann diese Datei herunter laden, die Hashwerte einlesen und dann mit den Hashwerten der lokalen Dateien vergleichen. (Vielleicht über die Hashdatei von der letzten Synchronisierung, oder die Hashwerte der lokalen Dateien jedesmal selbst erzeugen).
Ist ein Hashwert unterschiedlich: Datei aktualisieren.
Ist kein Hashwert für eine lokale Datei vorhanden: Datei löschen
Fehlt die lokale Datei: Datei herunterladen.

Ein Vergleich über Dateiname, Dateigröße und FileTime würde ähnlich ablaufen, nur dass statt dem herunterladen der HashDatei halt das ermitteln der Werte Dateiname, Dateigröße und Filetime der Root-Dateien als erstes erfolgt.
Dann wieder den gleichen Vergleich wie oben, nur halt auf DAteiname, Dateigröße und Filetime.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (24. Apr 2017 um 12:26 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#7

AW: Delphi Patcher

  Alt 24. Apr 2017, 12:38
Ich selber mache es so:

Auf meinem Server liegt eine Datei in der in jeder Zeile ein Dateiname steht.
Ich lade diese Liste herunter und gehe sie mit einer for-Schleife durch.
Nun hole ich mir über ein PHP-Script, welches auf dem Server liegt, den Hash dieser Datei.
Jetzt hole ich mir auch den Hash derselben Datei in meinem Programmverzeichnis.

Ich vergleiche jetzt beide Hash-es. In Einzelfällen vergleiche ich auch die Dateigröße.

Das ist meiner Meinung nach ein sicherer Weg. So funktioniert mein Updater/Patcher seit Jahren.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Delphi Patcher

  Alt 24. Apr 2017, 12:40
Hier im Forum suchendoppelte datei
damit solltest Du fündig werden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:44 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