Seite 1 von 2

Unterscheiden zwischen zwei Programmen

Verfasst: 29.12.2008 22:35
von Zulman
Hallo,
ich habe mir ein Programm programmiert, das automatisch eine Datei auf einen ftp server läd, falls diese sich nicht schon dort befindet. Wenn man die Datei auf der Festplatte ändert, soll die Änderung erkannt werden und auf den FTP-Server erneut hochgeladen werden. Das Programm soll im Hintergrund laufen und alle 30 Sekunden überprüfen, ob sich etwas an der Datei geändert hat. Das klappt auch schon, eben bis auf die Tatsache, dass er nicht erkennt ob die datei geändert wurde oder nicht und deshalb immer beim überprüfen die Datei neu hochläd. Ich habe die If Funktion verwendet.

so sah das an sich aus

Code: Alles auswählen

If ReadFile("Datei_auf_Festplatte") = ReadFile("Datei_auf_FTP")
          
Else
  SendFTP usw.
Ich hoffe ihr könnt mir helfen und bedanke mich schon ein mal.

mfg
Zulman

Verfasst: 29.12.2008 22:49
von c4s
Naja die primitivste Methode wäre, die Datei anhand einer Checksumme
alle 30secs zu vergleichen.
Z.B. könntest du diesen Wert durch die CRC32FileFingerprint()-Funktion
bekommen und dann mit einem Referenz-Wert vergleichen. Sind diese
ungleich, müsste sich deine Datei verändert haben.

Unterscheiden zwischen zwei Programmen

Verfasst: 29.12.2008 22:50
von Zulman
Ok danke ich kann mir schon ein bisschen darunter vorstellen^^ aber kannst du das bitte noch ein bisschen genauer erklähren? Programmiere erst seit ca. 4 Tagen.

Verfasst: 30.12.2008 09:10
von Sven
Ich glaub so:

1. Datei ist lokal gespeichert
2. neuen CRC32 oder MD5-Schlüssel für Datei bilden lassen
3. Schlüssel mit altem Schlüssel vergleichen
4. wenn kein alter Schlüssel oder Schlüssel ungleich, Datei hochladen und Schlüssel merken, sonst nix machen
5. 30 sec warten, weiter mit 2.

Verfasst: 30.12.2008 12:08
von orderinchaos
Hi,

hab dir da kurz ne prozedur gebastelt, vielleicht hilft sie dir ja weiter :

Code: Alles auswählen

Procedure.s CompareCRCFiles(File1$,File2$)
LocalFile = CRC32FileFingerprint(File1$)
RemoteFile = CRC32FileFingerprint(File2$)

If LocalFile = RemoteFile
  Result$ = "Keine Veränderung"
  ProcedureReturn Result$
Else
  Result$ = "Datei wurde verändert"
  ProcedureReturn Result$
EndIf
EndProcedure

Debug CompareCRCFiles("file1.txt","file2.txt")
hoffe konnte dir ein wenig helfen! :mrgreen:

Unterscheiden zwischen zwei Programmen

Verfasst: 30.12.2008 12:49
von Zulman
Ok, danke für die schnelle Hilfe. Ich werd das mal ausprobieren und melde mich dann obs geklappt hat, oder ob ichs mal wieder nicht zustande bekommen ;) .

Verfasst: 30.12.2008 12:54
von Kaeru Gaman
also, ich find vergleichen des gesamten files oder seiner checksummen
(auch dafür muss das komplette file gelesen werden) doch ein bissel overkill, ihr nicht?

warum vergleichst du nicht einfach das änderungsdatum?
das ist ein simples Fileattribut, was man checken muss, und alles ist wölkchen.

Unterscheiden zwischen zwei Programmen

Verfasst: 30.12.2008 13:07
von Zulman
Jo das ist ne sehr gute Idee. Hab ich mir auch schon gedacht aber leider wusste ich nicht ob so was möglich ist und wenn ja wie das geht. Deshalb hab ich nen andren weg gesucht. Wenn du mir einen Code geben könntest, mit dem das möglich ist, währe ich dir sehr dankbar :) .

Verfasst: 30.12.2008 13:12
von Kaeru Gaman
jetz sei mal so lieb und guck in die Hilfe...
ein Tip: du findest was im Kapitel "File System"...

Unterscheiden zwischen zwei Programmen

Verfasst: 30.12.2008 13:15
von Zulman
Ok, werd ich machen aber muss dafür erst wieder an den PC wo PB drauf installiert ist und das werd ich erst heut Nachmittag/Abend schaffen weil ich jetzt erst noch Hunde-Sitten muss^^